【问题标题】:Convert Double to ByteArray or Array<Byte> Kotlin将 Double 转换为 ByteArray 或 Array<Byte> Kotlin
【发布时间】:2016-05-25 15:21:39
【问题描述】:

给定一个双倍

val double = 1.2345

如何将其转换为 Kotlin ByteArray 和/或 Array&lt;Byte&gt;?

转换 1.2345 后其内容如下所示

00111111 11110011 11000000 10000011
00010010 01101110 10010111 10001101

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

我不介意解决方案是否会在此文件中产生 Kotlin.Double 无法访问。 :)

【问题讨论】:

    标签: kotlin


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      然后将any way that works in Java中的ByteArray转换成any way that works in Java,如

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

      【讨论】:

      • 也可以考虑使用import java.lang.Double as JDouble将java.lang.Double变成JDouble
      • bytes() 方法似乎不存在。我必须导入一些东西吗?
      • 在多平台项目中的完美突破点
      猜你喜欢
      • 2015-01-09
      • 1970-01-01
      • 2014-07-21
      • 1970-01-01
      • 2019-04-04
      • 2019-07-12
      • 1970-01-01
      • 1970-01-01
      • 2023-01-21
      相关资源
      最近更新 更多