在Swift中将bytes / UInt8数组转换为Int

如何将一个4字节的数组转换为相应的Int?

let array: [UInt8] ==> let value : Int

例:

输入:

\0\0\0\x0e

输出:

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在Swift 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版本,请参见环境光的答案。

以上是 在Swift中将bytes / UInt8数组转换为Int 的全部内容, 来源链接: utcz.com/qa/433045.html

回到顶部