将Swift数据转换为Int16

问题描述 投票:0回答:1

我有一个Java服务器,我拿了一个short[],我将它转换为byte[](Big Endian),然后将它发送到iOS设备。我无法将此字节数组(或Swift中的Data)转换为int16数组([Int16])。我也想知道我是否正确假设Swift相当于Java short类型是Swift中的Int16

java ios swift
1个回答
3
投票

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]
© www.soinside.com 2019 - 2024. All rights reserved.