Преобразовать Int в UnsafePointer ‹UInt8›

Я быстро создаю TCP-клиент для приложения на устройстве iOS. Я использую NSOuputStream для отправки данных на сервер. Наш протокол относится к типу JSON, и мы должны сначала отправить длину json (беззнаковое 32 бита Int), а затем содержимое JSON (в виде строки UTF8).

Все работает нормально, за исключением того, что я не могу найти, как написать свой Int, используя write(_:maxLength:) функцию NSOutputStream ..

Чтобы преобразовать мою строку JSON в UnsafePointer<UInt8>, я использую следующее

//var json: String
let encodedData = [UInt8](json.utf8)
let result = outputStream?.write(encodedData, maxLength: encodedData.count)

Кто-нибудь знает, как это сделать для Int?

Спасибо за вашу помощь !


person bobby    schedule 12.09.2015    source источник


Ответы (2)


У вас должно получиться что-то вроде этого:

var int = 100

let result = withUnsafePointer(&int) {
    outputStream?.write(UnsafePointer($0), maxLength: sizeof(Int))
}

РЕДАКТИРОВАТЬ: Чтобы прочитать свой Int, вы можете сделать

func getInt(ptr: UnsafePointer<UInt8>) -> Int {
    return UnsafePointer(ptr).memory
}
person Kametrixom    schedule 12.09.2015
comment
Здорово ! Это было именно то, что мне было нужно. Как я мог сделать то же самое для чтения Int? - person bobby; 12.09.2015
comment
@bobby Отредактировал мой ответ - person Kametrixom; 12.09.2015
comment
Спасибо ! Это то, что мне нужно - person bobby; 12.09.2015

Swift 4:

var int = 100

let result = withUnsafePointer(to: & int) {
            let unsafePointer8 = $0.withMemoryRebound(to: UInt8.self, capacity: 1, {$0})
            outputStream?.write(unsafePointer8, maxLength: MemoryLayout<Int64>.size)
        }
person Puneet Sharma    schedule 11.08.2017