UDP パケットからuint8 (符号なし 8 ビット整数)が入ってきます。Java は署名されたプリミティブのみを使用します。このデータ構造をJavaで正しく解析するにはどうすればよいですか?
20944 次
5 に答える
26
単純にバイトとして読み取ってから、int に変換します。
byte in = udppacket.getByte(0); // whatever goes here
int uint8 = in & 0xFF;
そうしないと、ビット 8 が 1 に設定された値が負の int に変換されるため、ビットマスクが必要です。例:
This: 10000000
Will result in: 11111111111111111111111110000000
そのため、後でビットマスク 0xFF を適用すると、先頭の 1 がキャンセルされます。ご参考までに:0xFF == 0b11111111
于 2012-12-28T14:58:23.330 に答える
5
0xFF & number
数値を符号なしバイトとして扱います。しかし、結果の型はint
于 2012-12-28T14:57:43.247 に答える
5
8ビットをaに格納できbyte
ます。本当にそれを符号なし値に変換する必要がある場合(そしてしばしば変換しない場合)、マスクを使用できます
byte b = ...
int u = b & 0xFF; // unsigned 0 .. 255 value
于 2012-12-28T14:57:46.630 に答える
3
次のようなことができます。
int value = eightBits & 0xff;
&
演算子 (Java のすべての整数演算子と同様) は、(符号ビットを符号拡張することによって) にアップキャストしますeightBits
。int
これにより 0x7f より大きい値が負のint
値に変わるため、下位 8 ビットを除くすべてをマスクする必要があります。
于 2012-12-28T14:58:05.320 に答える
1
符号なしバイトのすべての値を保持するのに十分な範囲を持つashort
またはに単純に解析できます。int
于 2012-12-28T14:59:04.323 に答える