将Double转换为ByteArray或Array <byte> Kotlin

时间:2016-02-14 19:32:51

标签: 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的静态方法)的sollution,但是在Kotlin中,Double指的是Kotlin.Double,它没有这样的(或任何其他的)在这种情况下很有用)方法。

我不介意此文件中的sollution是否无法访问Kotlin.Double。 :)

2 个答案:

答案 0 :(得分:15)

您仍然可以使用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()

答案 1 :(得分:3)

自您回答以来,似乎添加了一些方便的方法,您可以使用

val double = 1.2345
ByteBuffer.allocate(java.lang.Double.BYTES)
     .putDouble(double).array()