java中的字节数组

use*_*753 4 java hex byte

嘿我需要在字节数组中存储以下十六进制值 - 0xCAFEBABEDEADBEEF.

所以我试着像这样存储它.

byte[] v0 = {11001010,11111110,10111010,10111110,11011110,10101101,10111110,11101111};
Run Code Online (Sandbox Code Playgroud)

其中11001010是二进制CA,11111110是二进制等FE.

但我得到一个错误,说11001010是一个int,所以我认为这是因为字节是java中的有符号字节,我们只能有+127到-128之间的值.

那么我有可能在java中做到这一点(可能使用无符号字节......如果它们存在!?)谢谢大家.

Doo*_*nob 10

放在0b号码前面.您可能还需要投射到byte:

byte[] v0 = {(byte)0b11001010,(byte)0b11111110,...};
Run Code Online (Sandbox Code Playgroud)

0b前缀意味着它是一个二进制数.

如果您希望它更容易阅读,您可以使用0x十六进制:

byte[] v0 = {(byte)0xCA,(byte)0xFE,(byte)0xBA,(byte)0xBE,...};
Run Code Online (Sandbox Code Playgroud)

如果你使用的Java版本少于7,这是一种方法(二进制形式):

byte[] v0 = {Byte.parseByte("11001010", 2),...);
Run Code Online (Sandbox Code Playgroud)


Nat*_*tix 5

文字11001010代表int类型和价值的小数11,001,010- 即11亿美元.

如果您使用的是Java 7,则可以使用0b前缀定义二进制文字,例如0b11001010.为了提高可读性,您可以在值中添加下划线,例如0b_1100_1010.

但请注意,即使是这样的二进制(或十六进制)文字的类型仍然是int.这一点,以及字节(不幸地)用Java 签名(因此它们的值在范围内-128 to 127)这一事实导致了一个问题,即一个值大于的字面值127必须手动转换为byte:

// 0b_1001_0001 or 0x91 is 145 in decimal
byte b1 = (byte) 0b_1001_0001;
byte b2 = (byte) 0x91;
Run Code Online (Sandbox Code Playgroud)

但是,这样的字节的值将是-111(145-256).要获取无符号值,需要手动将模块(256)添加到值:

int i1 = b1 + 256;
int i2 = b1 & 0xff;
// both i1 and i2 are 145
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅此问题