如何将4字节数组转换为对应的Int?
let array: [UInt8] ==> let value : Int
Example:
Input:
\0\0\0\x0e
Output:
14
我在互联网上找到的一些代码不起作用:
let data = NSData(bytes: array, length: 4)
data.getBytes(&size, length: 4)
// the output to size is 184549376
有两个问题:
-
Int
是 64 位平台上的 64 位整数,您的输入数据
只有 32 位。
-
Int
在当前所有 Swift 平台上使用小端表示法,
您的输入是大尾数。
话虽这么说,以下内容会起作用:
let array : [UInt8] = [0, 0, 0, 0x0E]
var value : UInt32 = 0
let data = NSData(bytes: array, length: 4)
data.getBytes(&value, length: 4)
value = UInt32(bigEndian: value)
print(value) // 14
或者使用Data
在斯威夫特 3 中:
let array : [UInt8] = [0, 0, 0, 0x0E]
let data = Data(bytes: array)
let value = UInt32(bigEndian: data.withUnsafeBytes { $0.pointee })
通过一些缓冲区指针魔法,您可以避免中间
复制到NSData
对象(Swift 2):
let array : [UInt8] = [0, 0, 0, 0x0E]
var value = array.withUnsafeBufferPointer({
UnsafePointer<UInt32>($0.baseAddress).memory
})
value = UInt32(bigEndian: value)
print(value) // 14
对于此方法的 Swift 3 版本,请参阅ambientlight 的答案。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)