将 Swift 数据转换为 Int16



我有一个Java服务器,我在其中获取short[]并将其转换为byte[](Big Endian(,然后将其发送到iOS设备。 我在将此字节数组(或 Swift 中的Data(转换为int16数组([Int16](时遇到问题。 我也想知道我假设 Javashort类型的 Swift 等价物是 Swift 中的Int16是否正确。

与往返数据 Swift 数字类型类似,您可以使用withUnsafeBytes获取数据视图的方法和UnsafeBufferPointer<Int16>为 16 位整数。然后使用Int16(bigEndian:)初始值设定项进行转换 从大端序到主机字节序的数字。例:

let data = Data(bytes: [0, 1, 0, 2, 1, 0, 255, 255])
let i16array = data.withUnsafeBytes {
UnsafeBufferPointer<Int16>(start: $0, count: data.count/2).map(Int16.init(bigEndian:))
}
print(i16array) // [1, 2, 256, -1]

Swift 5的更新:

let data = Data([0, 1, 0, 2, 1, 0, 255, 255])
let i16array = data.withUnsafeBytes {
Array($0.bindMemory(to: Int16.self)).map(Int16.init(bigEndian:))
}
print(i16array) // [1, 2, 256, -1]

最新更新