До сих пор я использовал следующий код для преобразования подписанных значений без знака, которые мне нужно отправить в виде байтового массива через 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)));
}
Что вы пробовали и что не работаете? Я предполагаю, что вы пробовали очевидное, но это не так, в чем проблема? –
BTW '((byte) (a & 0xFF))' такой же как '(byte) a' –
Почему вы сериализуете до полуразмера? Вы не можете этого сделать. Кроме того, все, что вам нужно сделать, это бросить, потому что Java [** сужение ** примитивного преобразования] (https://docs.oracle.com/javase/specs/jls/se8/html/jls-5.html# jls-5.1.3) будет делать то, что вы хотите. – Andreas