0

だから私はBluetooth経由でいくつかのものを送信しています。これには、バイト配列を使用しています.使用しているバイト配列の1つです。

private void sendIntensity(int I){
    intensity[3] = (byte) i;
    sendIntensity();
}

元のバイト配列は次のように構成されています。

private byte[] intensity = new byte[]{58,0,42,0,10,13}

私は編集テキストから強度を取得し、テキストを取得し、正規表現を使用して使用したい強度を見つけています。

int option = Integer.parseInt(text);

それをするために。基本的に、128 未満の数値は完全に機能します。配列に値を記録するため、これを見ることができます。127 に設定するとログに記録されます58, 0, 42, 127, 10, 13が、128 以上にすると、ログに記録すると奇妙なデータ セットが得られます。

そこに入れる最大数は255です。

使用時に配列にあるものをログに記録すると、intensity[3] = (byte) 128;戻ってきます50, 0, 42, -17, -66, -128, 10, 13

129を使用したときに何が起こるかをログに記録すると、戻ってきます50, 0, 42, -17, -66, -127, 10, 13

何が起こっている?なぜ私は本来50, 0, 42, 128, 10, 13あるべき姿に戻れないのですか?

4

2 に答える 2

2

これは、 byterange がであるためです。 a[-128, 127]よりも大きな値を設定しようとすると、に往復するなどです。127byte-128-127

SCJP 6の本から:

byte a = (byte) 128;

(...) 結果は?プリミティブを狭めると、Java は単純に収まらない上位ビットを切り捨てます。つまり、狭めているビットの左側にあるすべてのビットが失われます。

より詳しい情報:

于 2012-10-29T07:03:09.653 に答える
0

それは単純に、-128 から 128 までの Java のバイト特性によるものです。

于 2012-10-29T07:04:09.950 に答える