arrays - 在 Swift 5 中将字节数组转换为 Int64

标签 arrays swift int64 swift5

我正在处理各种 UInt8(小端)数组,需要将它们转换为 Int64。 在 Swift 4 中我使用了

let array: [UInt8] = [13,164,167,80,4,0]
let raw = Int64(littleEndian: Data(array).withUnsafeBytes { $0.pointee })
print(raw) //18533032973

效果很好。但是在 Swift 5 中,这种方式已被弃用,所以我切换到

let array: [UInt8] = [13,164,167,80,4,0]
let raw = array.withUnsafeBytes { $0.load(as: Int64.self) }
print(raw)

给出错误信息:

Fatal error: UnsafeRawBufferPointer.load out of bounds

在 Swift 5 中有没有一种方法可以转换它,而无需在转换工作之前用额外的 0 填充数组?

谢谢!

最佳答案

或者,您可以按照评论中的建议,通过重复移动和添加来计算数字:

let array: [UInt8] = [13, 164, 167, 80, 4, 0]
let raw = array.reversed().reduce(0) { $0 << 8 + UInt64($1) }
print(raw) // 18533032973

关于arrays - 在 Swift 5 中将字节数组转换为 Int64,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56429555/

相关文章:

c - 如何打印辅音比元音多的字符串?

javascript - 无法添加到已初始化的数组中

c++ - 复制二维结构数组 C++

ios - swift - 如何修改另一个类的对象的属性?

swift - “ fatal error :在展开可选值时意外发现nil”是什么意思?

asp.net - 如何在 JavaScript 中序列化 Int64 类型的变量而不损失准确性?

iphone - 将 int64 转换为 NSData

c - 我如何通过指针将数组加载到函数并将它们用于该函数中的计算

swift - 当包装值设置为 nil 时,弱包装类是否会抛出基于 Hashable 的集合?

r - 在 R 中处理大整数