微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Kotlin 整数到字节的转换

如何解决Kotlin 整数到字节的转换

将 16 位整数转换为长度为 2 的字节的 Kotlin 1.5 命令是什么?次要问题是 outputstream 最后需要一个字符串,以便它可以使用 toByteArray() 进行转换

# Original Python Code
...
i = int((2**16-1)*ratio) # 16 bit int
i.to_bytes(2,byteorder='big')
output = (i).to_bytes(2,byteorder='big') 


# Kotlin Code so far
var i = ((2.0.pow(16) - 1) * ratio).toInt() // Convert to 16 bit Integer
print("16 bit Int: " + i)
output = .....

....
...
val outputStream: OutputStream = socket.getoutputStream()
outputStream.write(output.toByteArray()) // write requires ByteArray for some reason

解决方法

这是简单的数学,因此最好手动计算并定义为扩展函数:

fun Int.to2ByteArray() : ByteArray = byteArrayOf(toByte(),shr(8).toByte())

然后就可以使用了:

output = i.to2ByteArray()
outputStream.write(output)

注意,此函数以小端序写入整数。如果您需要 big-endian,只需颠倒数组中项目的顺序。如果需要,您还可以添加一些最小/最大检查。

此外,如果您只需要 16 位值,那么您可以考虑使用 ShortUShort 而不是 Int。它在内存使用方面没有太大变化,但它可能是一种更简洁的方法 - 我们可以将我们的扩展命名为 toByArray() 并且我们不需要最小/最大检查。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。