2016-02-14 10 views
5
zu ByteArray oder Array Doppel Konvertieren

Bei einem Doppel<Byte> Kotlin

val double = 1.2345 

Wie kann ich umwandeln, das zu einer Kotlin ByteArray und/oder Array<Byte>?

, dessen Inhalt wie folgt aussehen würde nach 1,2345

00111111 11110011 11000000 10000011 
00010010 01101110 10010111 10001101 

In Java konvertieren, gibt es eine sollution die Double.doubleToLongBits() (Eine statische Methode von java.lang.Double) beinhaltet, aber in Kotlin, Double bezieht sich auf Kotlin.Double, die keine solche (oder andere in dieser Situation nützliche) Methode hat.

Es macht mir nichts aus, wenn eine Lösung Kotlin.Double in dieser Datei nicht erreichbar ist. :)

Antwort

11

Sie können immer noch Java Double ‚s Methoden verwenden, wenn Sie voll qualifizierte Namen verwenden haben:

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

Dann wandelt es in ByteArray in any way that works in Java, wie

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

(notieren Sie erneut den vollständig qualifizierten Namen)


Sie können dann eine extension function dafür machen:

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

Und die Nutzung:

val bytes = double.bytes() 
+2

auch mit 'Import java.lang.Double als JDouble' betrachten drehen' java.lang.Double 'in' JDouble' – Jire