Kotlin中的ByteArray转Float

12

我有一个由4个字节组成的数组,代表一个浮点数。 由于Kotlin缺少字节级的按位运算符,我应该如何以最优的方式将它转换为浮点数?


2
Kotlin具有移位、或、与、异或和反转运算符。https://kotlinlang.org/docs/reference/basic-types.html - Anton Holovin
1
你需要将字节扩展为整数以进行位运算,但这实际上不应该是一个真正的问题。 - RobCo
1个回答

20
你可以使用Java NIO ByteBuffer,它具有getFloat()getFloat(index)函数来实现这一点:
val bytes = byteArrayOf(1, 2, 3, 4)

val buffer = ByteBuffer.wrap(bytes)
val float1 = buffer.getFloat()  // Uses current position and increments it by 4
val float2 = buffer.getFloat(0) // Uses specified position

4
如果你的4字节数组代表一个小端序浮点数值,你需要添加.order(ByteOrder.LITTLE_ENDIAN): val wrap = ByteBuffer.wrap(bytes).order(ByteOrder.LITTLE_ENDIAN) - moobi
三年过去了,我仍在寻找答案。这个解决方案的问题在于它只是Java,并且无法与Kotlin Multiplatform一起使用。对此有何想法? - Raphael Tarita
1
如果这不起作用,可以查看float.toBits(),然后使用类似以下的代码:new byte[] { (byte) (intBits >> 24), (byte) (intBits >> 16), (byte) (intBits >> 8), (byte) (intBits) } - SaPropper

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接