2017-02-03 1 views
-2

До сих пор я использовал следующий код для преобразования подписанных значений без знака, которые мне нужно отправить в виде байтового массива через UDP во встроенную систему.Как сериализовать десятичное значение (double) на uint32 в Java?

public static byte serializeShort(short a) 
{ 
    return ((byte) (a & 0xFF)); 
} 

public static short serializeInt(int a) 
{ 
    return ((short) (a & 0xFFFF)); 
} 

public static int serializeLong(long a) 
{ 
    return ((int) (a & 0xFFFFFFFF)); 
} 

Проблема с длинными, некоторые значения могут быть действительными значениями. Выход этого метода я помещал в байтовый буфер через put(), putInt() или putShort().

Любая идея о том, как перевести подписанный в unsigned для двойного типа?

Конкретно здесь моя проблема:

У меня есть значение UInt32, который заселяется. Я заполняю свой байтовый буфер либо java, подписанным LONG, либо двойным знаком java. Я использовал «serializeLong()» выше для длин, и он отлично работает, но двойников нет.

ByteBuffer buffer = ByteBuffer.allocate(SIZE); 
if (value instanceof Long) 
    { 
     buffer.putInt(Util.serializeLong((Long) value)); 
    } else 
    { 
     buffer.putInt(Util.serializeLong(Double.doubleToLongBits((Double) value))); 
    } 
+1

Что вы пробовали и что не работаете? Я предполагаю, что вы пробовали очевидное, но это не так, в чем проблема? –

+1

BTW '((byte) (a & 0xFF))' такой же как '(byte) a' –

+0

Почему вы сериализуете до полуразмера? Вы не можете этого сделать. Кроме того, все, что вам нужно сделать, это бросить, потому что Java [** сужение ** примитивного преобразования] (https://docs.oracle.com/javase/specs/jls/se8/html/jls-5.html# jls-5.1.3) будет делать то, что вы хотите. – Andreas

ответ

-1

Вместо того, чтобы использовать распашные, вы должны использовать поплавок и получить его в использовании uint32 пространства: buffer.putInt ((Float.floatToRawIntBits (Math.abs ((Float) значение)))) ;

+0

Вы проигнорировали именно это предложение, когда оно было сделано четыре дня назад. – EJP

Смежные вопросы