双倍

val double = 1.2345

How can I convert that to a Kotlin ByteArray, and/or Array<Byte>?

Whose content would look like the following after converting 1.2345

00111111 11110011 11000000 10000011
00010010 01101110 10010111 10001101

In Java, there is a sollution that involves Double.doubleToLongBits()(A static method of java.lang.Double), but in Kotlin, Double refers to Kotlin.Double, which has no such (or any other useful in this situation) method.

我不介意一个解决方案是否会在这个文件中产生Kotlin.Double个不可访问的结果.:)

推荐答案

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

val double = 1.2345
val long = java.lang.Double.doubleToLongBits(double)

Then convert it to ByteArray in any way that works in Java, such as

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

(note the full qualified name again)


然后,您可以为此打extension function分:

fun Double.bytes() = 
    ByteBuffer.allocate(java.lang.Long.BYTES)
        .putLong(java.lang.Double.doubleToLongBits(this))
        .bytes()

以及用法:

val bytes = double.bytes()

Kotlin相关问答推荐

了解Kotlin函数

为什么";";.equals(1)在柯特林语中是有效的,但";";=1是无效的?

新的jOOQ Gradle插件无法正确处理自引用关系

TzdbZoneRulesProvider 在 java.time 中不工作

如何获取@JsonProperty 名称列表?

kotlin 父类具有依赖于抽象变量的变量

如何在 kotlin 中创建自定义迭代器并添加到现有类?

在 Compose 中使用 Text() 时如何获取文本的大小?

Kotlin 中二叉树的深度

Mixin 在 Jackson 中添加 defaultImpl 不起作用

奇怪的 cotlin check Not Null 参数错误

从字符串列表构建字符串

Kotlin 从其他类调用成员扩展函数

如何在 Kotlin for Android 上使用setTextColor(hexaValue),

使用最新的 com.jakewharton.rxbinding3:rxbinding:3.0.0-alpha2 库时未找到 RxTextView 和其他小部件

Kotlin - mutableMapOf() 会保留我输入的顺序

什么是开放式property?为什么我不能将其设置器设为private私有?

Jacoco在Gradle 7.0.2和Kotlin 1.5.10上失败

在 Kotlin 中创建 Spinner 时,如何在 Fragment 中的旋转屏幕上修复指定为非空的参数为空?

如何在特定条件下清除jetpack数据存储数据