シリアル ポートを使用して別のシステムからデータを読み取っています。133 バイトのパケットを読み取っています。2 番目のバイトはパケット番号で、3 番目のバイトはパケット番号の負の値です。
問題は、型byte
の範囲が -128 から 127 であることです。-129 (バイトの範囲外) を読み取ろうとすると、値が 127 になります。
-129 を取得するにはどうすればよいですか?
バイト値が持つと予想される範囲を決定する必要があります。たとえば、-129 から 126 の範囲が予想される場合は、使用できます。
int min = 129;
int i = ((b + min) & 0xFF) - min;
ところで、256 を超える値を持つことはできません。
1 バイトはわずか 8 ビットであり、値がラップアラウンドしているため、127 を取得しています。-129 は Java バイトに収まりません。特定の変数に -129 を適合させたい場合は、少なくとも short を使用するようにプログラムを変更する必要があります。
プロトコルがわからないので、ここで少し推測する必要があります。
おそらく、両方の値をプロトコルで符号なし (正) バイトとして扱う必要があります。後で int に変換できます。
// 0-255
int plus = (int)(plusByte & 0xFF);
// -255 - 0
int minus = 0 - (int)(minusByte & 0xFF);
この米国特許 6313763に関連していますか? しかし、パケットの長さは固定なので、わかりません。
256 の範囲よりも「大きい」数値を 1 バイトに格納することはできません。多分あなたはプロトコルを誤解していて、int の上位ビットと下位ビットが 2 バイトで格納されているのではないでしょうか?
-128 未満の値は符号付きバイトに収まりません。短編などを読む必要があります。