我有一个 Java 服务器,我在其中获取 short[]
并将其转换为 byte[]
(Big Endian),然后将其发送到 iOS 设备.我无法将此字节数组(或 Swift 中的 Data
)转换为 int16
数组 ([Int16]
)。我还想知道我假设 Java short
类型的 Swift 等价物是 Swift 中的 Int16
是否正确。
最佳答案
类似于round trip Swift number types to/from Data你可以使用 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]
关于java - 将 Swift 数据转换为 Int16,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45149413/