我正在使用蓝牙进行大量工作,大多数设计都是UInt8,这使得编码/解码数据流非常容易:
func encode() -> Data {
let values: [UInt8] = [value1, value2]
return Data(bytes: values)
}
init(data: Data) {
let values = Array(data)
self.value1 = values[0]
self.value2 = values[1]
}
但现在我需要使用其他数据类型。我有一个相关的question on decoding,但现在还需要编码和传输Int16
。我唯一的想法是像这样使用位移/屏蔽:
let x: Int16 = 21845
let x1 = UInt8(x >> 8)
let x2 = UInt8(x & 255)
let data = Data(bytes: [x2, x1])
是否有更清晰的方法,例如使用UInt8
时不涉及使用指针和位移?最好是适用于其他数据类型的东西。