gpt4 book ai didi

Swift:字节数组到十进制值

转载 作者:搜寻专家 更新时间:2023-10-31 22:24:27 26 4
gpt4 key购买 nike

在我的项目中,我与蓝牙设备进行通信,蓝牙设备必须在一秒钟内向我发送一个时间戳,我以字节为单位接收:

[2,6,239]

当我转换为字符串时:

let payloadString = payload.map {
String(format: "%02x", $0)
}

输出:

["02", "06","ef"]

当我从 website 转换时0206ef = 132847 秒

如何在秒(= 132847 秒)内直接转换我的数组 [2,6,239]?如果它很复杂,则在秒内翻译我的数组 ["02", "06,"ef"](= 132847 秒)

最佳答案

有效负载包含值的二进制表示形式的字节。您可以通过将每个字节移动到相应的位置来将其转换回值:

let payload: [UInt8] = [2, 6, 239]
let value = Int(payload[0]) << 16 + Int(payload[1]) << 8 + Int(payload[2])
print(value) // 132847

重要的一点是在移位之前将字节转换为整数,否则会发生溢出错误。或者,乘法:

let value = (Int(payload[0]) * 256 + Int(payload[1])) * 256 + Int(payload[2])

let value = payload.reduce(0) { $0 * 256 + Int($1) }

最后一种方法适用于任意数量的字节——只要结果适合 Int。对于 4...8 字节,您最好选择 UInt64避免溢出错误:

let value = payload.reduce(0) { $0 * 256 + UInt64($1) }

关于Swift:字节数组到十进制值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53314569/

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