将双精度转换为字节数组或数组<Byte> Kotlin



给定一个双精度

val double = 1.2345

如何将其转换为 Kotlin ByteArray和/或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)

然后以任何在 Java 中工作的方式将其转换为ByteArray,例如

val bytes = ByteBuffer.allocate(java.lang.Long.BYTES).putLong(long).array()

(再次记下完整的限定名(


然后,您可以为此创建一个扩展函数:

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()

最新更新