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

Cae*_*lum 8 kotlin

给出双倍

val double = 1.2345
Run Code Online (Sandbox Code Playgroud)

我怎样才能将其转换为Kotlin ByteArray,和/或Array<Byte>

在转换1.2345之后,其内容将如下所示

00111111 11110011 11000000 10000011
00010010 01101110 10010111 10001101
Run Code Online (Sandbox Code Playgroud)

在Java中,有一个涉及Double.doubleToLongBits()(java.lang.Double的静态方法)的sollution,但是在Kotlin中,Double指的是Kotlin.Double没有这种(或在这种情况下任何其他有用的)方法.

我不介意Kotlin.Double这个文件中的溶剂是否无法访问.:)

hot*_*key 16

您仍然可以使用Java Double的方法,但您必须使用完全限定名称:

val double = 1.2345
val long = java.lang.Double.doubleToLongBits(double)
Run Code Online (Sandbox Code Playgroud)

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

val bytes = ByteBuffer.allocate(java.lang.Long.BYTES).putLong(long).array()
Run Code Online (Sandbox Code Playgroud)

(再次注意完整的限定名称)


然后,您可以为此创建扩展功能:

fun Double.bytes() = 
    ByteBuffer.allocate(java.lang.Long.BYTES)
        .putLong(java.lang.Double.doubleToLongBits(this))
        .bytes()
Run Code Online (Sandbox Code Playgroud)

用法:

val bytes = double.bytes()
Run Code Online (Sandbox Code Playgroud)

  • 还可以考虑使用`import java.lang.Double作为JDouble`将`java.lang.Double`变为`JDouble` (3认同)