文法语法对于使用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中添加一个新的字节文字语法( y
或Y
后缀) 。然后,您将能够编写:
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); }