什么时候需要将java中的十六进制文字转换为(byte)?

时间:2011-12-23 10:30:21

标签: java casting hex

出于测试目的,我尝试创建一个这样的数组:

byte[] expected = new byte[]{0x2f, 0x0d4, 0xe1, 0xc6, 0x7a, 0x2d, 0x28, 0xfc}

我预料到,java会抱怨并会要求我将每个文字转换为(byte),但出乎意料的是,它要求我只转换0x4d,例如,而不是0x2f。工作示例:

new byte[]{0x2f, (byte) 0xd4, (byte) 0xe1, (byte) 0xc6, 0x7a, 0x2d, 0x28, (byte) 0xfc}

这是如何运作的?

3 个答案:

答案 0 :(得分:8)

我怀疑这是因为Java字节是有符号的,所以你的范围在-128到127之间。所以所有值> 127(0x80)都必须显式转换。

答案 1 :(得分:4)

没有ldf的数字是int值,因此必须输出值0x80和更大值。覆盖大量十六进制值的一种方法是使用以下

byte[] bytes = new BigInteger("2fd4e1c67a2d28fc", 16).toByteArray();
System.out.println(Arrays.toString(bytes));

打印

[47, -44, -31, -58, 122, 45, 40, -4]

这避免了值之间的一些繁琐的, (byte) 0x

答案 2 :(得分:2)

-128127之间的整数字面值会自动转换为目标类型,Java只有签名类型。