Преобразование Double в ByteArray или Array <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) 

Затем преобразуйте его в ByteArray любым способом, который работает на Java , например

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

(снова запишите полное квалифицированное имя)


Затем вы можете сделать функцию расширения :

 fun Double.bytes() = ByteArray.allocate(java.lang.Long.BYTES) .put(java.lang.Double.doubleToLongBits(this)) .bytes() 

И использование:

 val bytes = double.bytes()