gpt4 book ai didi

swift - 如何 swift 将 Int16 转换为两个 UInt8 字节

转载 作者:IT王子 更新时间:2023-10-29 05:22:51 24 4
gpt4 key购买 nike

我有一些二进制数据,将两个字节的值编码为有符号整数。

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)

关于swift - 如何 swift 将 Int16 转换为两个 UInt8 字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32830866/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com