java中的字节数组



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

所以我试着这样储存。

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

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

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

那么,我有没有办法在java中做到这一点(也许使用无符号字节……如果它们存在的话!?)谢谢大家。

0b放在数字前面。您可能还必须转换为byte:

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

0b前缀表示它是一个二进制数。

如果你想让它更容易阅读,你可以用0x表示十六进制:

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

如果您使用的Java版本小于7:,这里有一种方法(二进制形式)

byte[] v0 = {Byte.parseByte("11001010", 2),...);

文字11001010表示int类型和值11,001,010的小数,即1100万左右。

如果使用Java7,则可以使用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;

但是,该字节的值将是-111(145-256)。要返回无符号值,您需要手动将模块(256)添加到值:

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

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

如果逐字节写入,可以使用:

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

byte[] v0 = {0xCA, 0xFE, ... }

相关内容

  • 没有找到相关文章

最新更新