如何在swift中将Int16转换为两个UInt8字节
发布时间:2020-12-14 05:46:10 所属栏目:百科 来源:网络整理
导读:我有一些二进制数据,将两个字节的值编码为有符号整数. bytes[1] = 255 // 0xFFbytes[2] = 251 // 0xF1 解码 这很简单 – 我可以从这些字节中提取Int16值: Int16(bytes[1]) 8 | Int16(bytes[2]) 编码 这是我遇到问题的地方.我的大多数数据规范都要求使用UInt
我有一些二进制数据,将两个字节的值编码为有符号整数.
bytes[1] = 255 // 0xFF bytes[2] = 251 // 0xF1 解码 这很简单 – 我可以从这些字节中提取Int16值: Int16(bytes[1]) << 8 | Int16(bytes[2]) 编码 这是我遇到问题的地方.我的大多数数据规范都要求使用UInt,这很简单,但我无法提取组成Int16的两个字节 let nv : Int16 = -15 UInt8(nv >> 8) // fail UInt8(nv) //fail 题 如何提取构成Int16值的两个字节
你应该使用无符号整数:
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) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |