java - 将 Swift 数据转换为 Int16

标签 java ios swift

我有一个 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/

相关文章:

ios - 以编程方式在特定坐标上触发单击/点击

ios - 如何只为一个 View Controller 锁定方向?

java - StatusLogger 发现多个日志记录实现

java - 使用文件处理程序创建目录

java - 如何停止计时器

ios - 从 URL 下载图像时 Nsurlsession 内存泄漏

swift - UIImagePickerController 导航栏色调颜色不适用于 iOS 13

Java:为什么 String.format() 不能处理这个 Long 变量?

ios - xcode 5存档构建失败,但正常构建成功

javascript - 使用 JS 或 CSS 检测 iOS 设备是否有 home bar