Swift 3.0 конвертирует данные в массив<UInt8>

Как преобразовать данные в массив UInt8?

func serialPort(_ serialPort: ORSSerialPort, didReceive data: Data) {
print("recieved:\(data)")
let arr: [UInt8] = Data(???)???
}

получено:70 байт

3 ответа

В Свифте 3 Data работает как Collection из UInt8так что вы можете просто использовать Array.init,

var received: [UInt8] = []

func serialPort(_ serialPort: ORSSerialPort, didReceive data: Data) {
    print("received:\(data))")
    received = Array(data)
}

Но, Array.init (или же Array.append(contentsOf:)) копирует содержание Dataтак что это не эффективно, когда вам нужно работать с огромным размером Data,

Использовать с UnsafeBytes:

let data = "ABCD".data(using: .ascii)!
data.withUnsafeBytes {  (pointer: UnsafePointer<UInt8>) in
    //Prints 67 which is the ASCII value of 'C'
    print(pointer[2])
}

Понял!

var recived = [UInt8]()

func serialPort(_ serialPort: ORSSerialPort, didReceive data: Data) {
        recived.removeAll()
        print("recieved:\(data))")
        recived.append(contentsOf: data)
}
Другие вопросы по тегам