지금까지 다음 코드를 사용하여 서명 된 값을 UDP를 통해 임베디드 시스템에 바이트 배열로 보내야하는 부호로 변환했습니다.10 진수 값 (double)을 Java에서 uint32로 직렬화하는 방법은 무엇입니까?
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()를 통해 바이트 버퍼에 넣은이 메서드의 출력입니다.
부호가없는 유형을 이중 유형으로 변환하는 방법에 대한 아이디어가 있으십니까? 내가 채워되고있는 UINT32 값이
:
은 특히 여기 내 문제입니다. 내 바이트 버퍼에 Java 서명 된 긴 또는 Java 서명 된 이중 채울거야. 내가 longs에 대한 '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