如果我的格式正确ByteArray(例如byteArrayOf(12, 0, 24, 0)),将其转换为的最简单方法是ShortArray什么?
为简单起见,除非字节序处理也很容易,否则假定为低字节序。
结果ShortArray应为(12, 24)。
您可以使用将其ByteArray作为列表处理.chunked(),尽管您必须手动将两个字节转换为Short:
val bytes = byteArrayOf(12, 0, 24, 0)
val shorts = bytes
.asList()
.chunked(2)
.map { (l, h) -> (l.toInt() + h.shl(8)).toShort() }
.toShortArray()
Run Code Online (Sandbox Code Playgroud)
我不确定为什么,但似乎 Kotlin 将字节视为已签名的字节,并且上述答案仅在每对的第一个字节 < 127 时才有效。
例如(编辑以上内容以返回正确答案):
val byteArray = byteArrayOf(211.toByte(), 0, 24, 0)
val shortArray = ShortArray(byteArray.size / 2) {
(byteArray[it * 2].toUByte().toInt() + (byteArray[(it * 2) + 1].toInt() shl 8)).toShort()
}
println(shortArray.toList()) // [211, 24]
Run Code Online (Sandbox Code Playgroud)
使用具有相同值的上述代码会返回错误信息,如 [-45, 24]
| 归档时间: |
|
| 查看次数: |
757 次 |
| 最近记录: |