2017-02-03 1 views
-2

지금까지 다음 코드를 사용하여 서명 된 값을 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))); 
    } 
+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 ((플로트) 값)))) ;

+0

4 일 전 제안을 정확히 무시했습니다. – EJP

관련 문제