【发布时间】:2021-10-08 18:58:39
【问题描述】:
我正在通过 BLE 传输 UInt16 值。根据我的阅读,为此,我需要将UInt16 转换为UInt8,这将转换为Data 类型。我一直在指this thread。例如,我使用了下面的代码:
extension Numeric {
var data: Data {
var source = self
return Data(bytes: &source, count: MemoryLayout<Self>.size)
}
}
extension Data {
var array: [UInt8] { return Array(self) }
}
let arr = [16, 32, 80, 160, 288, 400, 800, 1600, 3200]
for x in arr {
let lenghtByte = UInt16(x)
let bytePtr = lenghtByte.bigEndian.data.array
print(lenghtByte, ":", bytePtr)
}
我不太明白的是,当我将UInt16 转换为大端数组时,这些值将如何加起来为相应的实际值。希望这是有道理的。上面sn-p的输出是,
16 : [0, 16]
32 : [0, 32]
80 : [0, 80]
160 : [0, 160]
288 : [1, 32]
400 : [1, 144]
800 : [3, 32]
1600 : [6, 64]
3200 : [12, 128]
我想知道的是如何使用 Big-endian 数组中的 UInt8 值计算 160 之后的每个值? (即 [12,128] 如何等同于 3200,同样)。
提前谢谢你:)
【问题讨论】:
-
12 * 256 + 128 = 3200
标签: ios swift bluetooth-lowenergy data-conversion uint16