文法语法对于使用hex表示法的byte 数组。

编译器似乎没问题(只有一位hex数值):

byte[] rawbytes={0xa, 0x2, 0xf}; 

但不是这样的:

 byte[] rawbytes={0xa, 0x2, 0xff}; 

我得到一个“可能发生的精度损失:int required:byte”错误?

我在做什么错 – 或者是一位数的hex数是一个特例?

Java 1.5.x.

正如其他人已经说过的那样,byte是Java中的一种签名types。 范围从-128到127(含)。 所以0xff等于-0x01。 如果添加手动演员,则可以使用0xff而不是-0x01:

 byte[] rawbytes={0xa, 0x2, (byte) 0xff}; 

通过声明具有可变参数的辅助函数还有一种可能性。 如果你需要声明多个字节数组,这可能会更好。

示例代码

 public static byte[] toBytes(int... ints) { // helper function byte[] result = new byte[ints.length]; for (int i = 0; i < ints.length; i++) { result[i] = (byte) ints[i]; } return result; } public static void main(String... args) { byte[] rawbytes = toBytes(0xff, 0xfe); // using the helper for (int i = 0; i < rawbytes.length; i++) { System.out.println(rawbytes[i]); // show it works } } 

“0xFF”是十进制值255的整数字面值,不能表示为字节。

现在,你需要把它转换成一个byte来告诉编译器你的意思是-1,就像这样:

 byte[] rawbytes = { 0xA, 0x2, (byte) 0xFF }; 

build议在Java 7中添加一个新的字节文字语法( yY后缀) 。然后,您将能够编写:

 byte[] rawbytes = { 0xA, 0x2, 0xFFy }; 

但是,这个提案并没有包含在“综合文字综合提案”中,所以我们一直坚持这个演员。

byte被签名, 0xff = 255太大。 有效范围是(-128..127)。

示例代码:

 public static void main(String[] args) { byte b = (byte) 0xff; // = -1 int i = b; // = -1 int j = b & 0xff; // = 255 System.out.printf("b=%s, i=%s, j=%s", b,i,j); }