0

次のコードがあります。

byte[] someArray;
int a,b;
.
.
.
a=123; (result coming from calculations, always 0>=a<256)
b=91; (result coming from calculations, always 0>=b<256)

今、私はこれをしたいです

someArray[0]=a;
someArray[6]=b;

しかし、私はこれにバイトに変換しようとしましたが、失敗しました(考えられるすべてのエラーメッセージを取得しました)。整数からバイトへの変換を参照するさまざまなスニペットも試しました。

何か考えはありますか?

これを更新してください java.lang.NumberFormatException: Invalid int: "z" when this byteArray[0]=Integer.valueOf(String.valueOf(bani.substring(2, 3)), 16).byteValue( );

4

6 に答える 6

2

integer -> byte変換すると、精度が失われる可能性があるため、コンパイル エラーが発生します。ドキュメンテーション。

ただし、明示的なキャストを行うことができます。

someArray[0]=(byte)a;
于 2013-08-28T10:59:44.100 に答える
2

バイトではないことに注意して0ください255!それ-128+127

これを認識している場合は、値をキャストするだけです

someArray[0] = (byte) a;
someArray[6] = (byte) b;

ただし、Java はすべてをキャストするため、チェックで囲みます。

if(value <= Byte.MAX_VALUE && value >= Byte.MIN_VALUE) {
    //do the cast
}
else {
    //error handling
}

例えば:

int i = 1300;
byte b = (byte) i;
//b will be 20 here

アップデート:

a を呼び出したい場合は、NumberFormatException次のように値を解析できます。

Byte.valueOf(Integer.toString(value));

バイトは -128 から 127 までであることを忘れないでください!

于 2013-08-28T10:59:47.180 に答える
0

Java インテグラル プリミティブ型 (byte、short、int、long) は常に符号付きです。

したがって、バイトは常に -128...127 です。

キャストを使用してintをバイトに変換できます

int i = 120;

byte b = (byte) i;

120 の代わりに 200 を i に割り当てると、b は -56 になり、b を i に割り当てると、i は -56 のままで、200 にはなりません。

これは、200 のバイナリ表現が 11001000 であり、これらのビットをバイトに入れると、-56 として解釈され、これを再び int に入れると、111111111111111111111001000 になるためです。

于 2013-08-28T11:05:35.530 に答える
0

まず、Java には unsigned データ型はありません。それらはすべて符号付き byteであり、符号付きデータ型であり、範囲内の値を保持できます-128 <= b => 127。次に、保持できるbyte値を取得するために、整数値から 128 を引き、それを にキャストする必要があります。byte

someArray[0] = (byte) (a - 128);
someArray[6] = (byte) (b - 128);
于 2013-08-28T10:59:57.570 に答える
0

これを開発するアプリケーションがメモリ使用量にどの程度関係しているかはわかりません:-)。HBase APIBytes.toBytes()にAPI があります。この API を使用して、多くの型のバイト表現を取得できます。逆に変換するのと同じように、逆を使用できる場合があります。私が見た限りでは、精度の低下や値の変化の問題は見られません。Bytes.toInt()

ここから lib をダウンロードできますHbase Lib .. lib からプロジェクトに hbase-0.94.jar を追加します。

于 2013-08-28T11:13:16.590 に答える