4

次の 16 進値をバイト配列に格納する必要があります - 0xCAFEBABEDEADBEEF。

そんな感じで収納してみました。

byte[] v0 = {11001010,11111110,10111010,10111110,11011110,10101101,10111110,11101111};

ここで、11001010 はバイナリの CA、11111110 はバイナリの FE などです。

しかし、11001010 は int であるというエラーが表示されます。これは、Java ではバイトが符号付きバイトであり、+127 と -128 の間の値しか持てないためだと思います。

Javaでこれを行う方法はありますか(おそらく符号なしバイトを使用しています...存在する場合!?)ありがとうございます。

4

3 に答える 3

10

0b番号の前に置きます。次のようにキャストする必要がある場合もありますbyte

byte[] v0 = {(byte)0b11001010,(byte)0b11111110,...};

0bプレフィックスは、2 進数であることを意味します。

読みやすくしたい場合は0x、16 進数に使用できます。

byte[] v0 = {(byte)0xCA,(byte)0xFE,(byte)0xBA,(byte)0xBE,...};

7 未満の Java バージョンを使用している場合の方法 (バイナリ形式) は次のとおりです。

byte[] v0 = {Byte.parseByte("11001010", 2),...);
于 2013-02-06T22:32:50.463 に答える
5

リテラルは、タイプと値11001010の小数を表します。つまり、1100万などです。int11,001,010

Java 7を使用している場合は、0bプレフィックスを使用してバイナリリテラルを定義できます0b11001010。読みやすさを向上させるために、値にアンダースコアを付けることができます0b_1100_1010

ただし、そのような2進(または16進)リテラルの型もまだであることに注意してくださいintこれは、バイトが(残念ながら)Javaで署名されている(したがって、それらの値は範囲内にある)という事実とともに、手動でキャストする必要がある-128 to 127よりも大きい値を持つリテラルという問題を引き起こします。127byte

// 0b_1001_0001 or 0x91 is 145 in decimal
byte b1 = (byte) 0b_1001_0001;
byte b2 = (byte) 0x91;

ただし、そのようなバイトの値は-111(145-256)になります。符号なしの値を取得するには、モジュール(256)を値に手動で追加する必要があります。

int i1 = b1 + 256;
int i2 = b1 & 0xff;
// both i1 and i2 are 145

詳細については、この質問を参照してください

于 2013-02-06T22:34:32.113 に答える
3

バイトからバイトに書き込む場合は、次を使用できます。

byte[] v0 = {0b11001010, 0b11111110, 0b10111010, ... }

また

byte[] v0 = {0xCA, 0xFE, ... }
于 2013-02-06T22:33:27.257 に答える