为什么在Java中将十六进制数转换为字节不起作用?

时间:2012-10-27 06:59:01

标签: java c++ byte

"byte FOO = 0xFE;" 在java中不起作用。

"Cannot convert from into to byte"但它适用于C ++。 怎么解决这个问题?

2 个答案:

答案 0 :(得分:8)

0xFE相当于254中的int,并且不在字节范围内,因此如果您尝试将其存储在一个字节中,则不会进行隐式类型转换。 您的RHS值必须在[-128 to 127]范围内才能以字节为单位。

或者,您可以通过explicit typecasting明确告诉编译器存储它:

byte FOO = (byte)0xFE;

但是,如果存储的值可以在byte范围内,则不需要进行明确的类型转换。

byte FOO = 0x20;  // OK, can accommodate in byte.

有关类型转换的详细信息,请参阅JLS - Section # 5.1

JLS - Section # 5.2专门讨论了Assignment Conversion

引用JLS的陈述: -

  

如果类型为,则可以使用缩小的基元转换   变量是byte,short或char,以及常量的值   表达式可以在变量的类型中表示。

答案 1 :(得分:2)

或者:

long FOO = 0xFE; //Use long as type

byte FOO = (byte)0xFE; //Typecast to byte.

通过使用十六进制数,编译器将识别该值是否适合字节范围[-128,127]。由于0xFE大于127,您必须使用intlong,因为它超出了byte的范围。

您的示例名为Narrowing conversion