将 Double 转换为 ByteArray 或 Array<Byte> Kotlin
Convert Double to ByteArray or Array<Byte> Kotlin
给了一个双倍
val double = 1.2345
如何将其转换为 Kotlin ByteArray
、and/or Array<Byte>
?
1.2345转换后的内容如下所示
00111111 11110011 11000000 10000011
00010010 01101110 10010111 10001101
在Java中有一个解决方案涉及Double.doubleToLongBits()
(java.lang.Double的静态方法),但在Kotlin中,Double指的是Kotlin.Double
,它有没有这样的(或任何其他在这种情况下有用的)方法。
我不介意解决方案是否会导致此文件无法访问 Kotlin.Double
。 :)
您仍然可以使用 Java Double
的方法,但您必须使用完整的限定名称:
val double = 1.2345
val long = java.lang.Double.doubleToLongBits(double)
然后在any way that works in Java中转换成ByteArray
,比如
val bytes = ByteBuffer.allocate(java.lang.Long.BYTES).putLong(long).array()
(再次注意完整的限定名称)
然后您可以为此制作一个extension function:
fun Double.bytes() =
ByteBuffer.allocate(java.lang.Long.BYTES)
.putLong(java.lang.Double.doubleToLongBits(this))
.bytes()
以及用法:
val bytes = double.bytes()
自从您回答以来,似乎添加了一些方便的方法,您可以使用
实现相同的效果
val double = 1.2345
ByteBuffer.allocate(java.lang.Double.BYTES)
.putDouble(double).array()
给了一个双倍
val double = 1.2345
如何将其转换为 Kotlin ByteArray
、and/or Array<Byte>
?
1.2345转换后的内容如下所示
00111111 11110011 11000000 10000011
00010010 01101110 10010111 10001101
在Java中有一个解决方案涉及Double.doubleToLongBits()
(java.lang.Double的静态方法),但在Kotlin中,Double指的是Kotlin.Double
,它有没有这样的(或任何其他在这种情况下有用的)方法。
我不介意解决方案是否会导致此文件无法访问 Kotlin.Double
。 :)
您仍然可以使用 Java Double
的方法,但您必须使用完整的限定名称:
val double = 1.2345
val long = java.lang.Double.doubleToLongBits(double)
然后在any way that works in Java中转换成ByteArray
,比如
val bytes = ByteBuffer.allocate(java.lang.Long.BYTES).putLong(long).array()
(再次注意完整的限定名称)
然后您可以为此制作一个extension function:
fun Double.bytes() =
ByteBuffer.allocate(java.lang.Long.BYTES)
.putLong(java.lang.Double.doubleToLongBits(this))
.bytes()
以及用法:
val bytes = double.bytes()
自从您回答以来,似乎添加了一些方便的方法,您可以使用
实现相同的效果val double = 1.2345
ByteBuffer.allocate(java.lang.Double.BYTES)
.putDouble(double).array()