我有一些二进制数据,将两个字节值编码为有符号整数。
bytes[1] = 255 // 0xFF
bytes[2] = 251 // 0xF1
Decoding
这相当简单——我可以提取一个Int16
这些字节的值:
Int16(bytes[1]) << 8 | Int16(bytes[2])
Encoding
这就是我遇到问题的地方。我的大部分数据规范都要求UInt
这很容易,但我在提取组成一个的两个字节时遇到了麻烦Int16
let nv : Int16 = -15
UInt8(nv >> 8) // fail
UInt8(nv) // fail
Question
我如何提取组成一个的两个字节Int16
value
您应该使用无符号整数:
let bytes: [UInt8] = [255, 251]
let uInt16Value = UInt16(bytes[0]) << 8 | UInt16(bytes[1])
let uInt8Value0 = uInt16Value >> 8
let uInt8Value1 = UInt8(uInt16Value & 0x00ff)
如果您想将 UInt16 转换为位等效的 Int16,那么您可以使用特定的初始化程序来完成:
let int16Value: Int16 = -15
let uInt16Value = UInt16(bitPattern: int16Value)
反之亦然:
let uInt16Value: UInt16 = 65000
let int16Value = Int16(bitPattern: uInt16Value)
在你的情况下:
let nv: Int16 = -15
let uNv = UInt16(bitPattern: nv)
UInt8(uNv >> 8)
UInt8(uNv & 0x00ff)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)