5

シリアル ポートを使用して別のシステムからデータを読み取っています。133 バイトのパケットを読み取っています。2 番目のバイトはパケット番号で、3 番目のバイトはパケット番号の負の値です。

問題は、型byteの範囲が -128 から 127 であることです。-129 (バイトの範囲外) を読み取ろうとすると、値が 127 になります。

-129 を取得するにはどうすればよいですか?

4

4 に答える 4

8

バイト値が持つと予想される範囲を決定する必要があります。たとえば、-129 から 126 の範囲が予想される場合は、使用できます。

int min = 129;
int i = ((b + min) & 0xFF) - min;

ところで、256 を超える値を持つことはできません。

于 2009-04-27T06:28:13.817 に答える
6

1 バイトはわずか 8 ビットであり、値がラップアラウンドしているため、127 を取得しています。-129 は Java バイトに収まりません。特定の変数に -129 を適合させたい場合は、少なくとも short を使用するようにプログラムを変更する必要があります。

于 2009-04-27T06:12:00.097 に答える
4

プロトコルがわからないので、ここで少し推測する必要があります。

おそらく、両方の値をプロトコルで符号なし (正) バイトとして扱う必要があります。後で int に変換できます。

// 0-255
int plus = (int)(plusByte & 0xFF);

// -255 - 0
int minus = 0 - (int)(minusByte & 0xFF);

この米国特許 6313763に関連していますか? しかし、パケットの長さは固定なので、わかりません。

256 の範囲よりも「大きい」数値を 1 バイトに格納することはできません。多分あなたはプロトコルを誤解していて、int の上位ビットと下位ビットが 2 バイトで格納されているのではないでしょうか?

于 2009-04-27T07:48:18.040 に答える
1

-128 未満の値は符号付きバイトに収まりません。短編などを読む必要があります。

于 2009-04-27T11:00:46.300 に答える