2017-02-03 11 views
-2

これまで私は、埋め込みシステムにUDP経由でバイト配列として送信する必要がある符号付きの値を符号付きの値に変換するために次のコードを使用してきました。Javaのuint32に10進値(double)をシリアル化する方法は?

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で署名されたLONGまたはJavaで署名されたdoubleのいずれかを埋めています。私は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の[** narrowing ** primitive conversion](https://docs.oracle.com/javase/specs/jls/se8/html/jls-5.html# jls-5.1.3)があなたの望むことをします。 – Andreas

答えて

-1

、あなたはfloatを使うべきとUINT32空間利用されるようにそれを得るために:buffer.putInt((Float.floatToRawIntBits(Math.abs((フロート)値を)))) ;

+0

4日前にその提案が無視されました。 – EJP

関連する問題