嘿我需要在字节数组中存储以下十六进制值 - 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)
文字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)
有关更多信息,请参阅此问题
归档时间: |
|
查看次数: |
5556 次 |
最近记录: |