【发布时间】:2019-09-08 20:56:29
【问题描述】:
我正在尝试将大于 255(无符号)的十六进制值存储到两个字节中。下面是示例代码:
public class Test {
public static void main(String[] args) {
byte b = (byte)0x12c; // output : 44
System.out.println(b);
}
}
示例:当我将 300 转换为十六进制时,它将是 12c,它应该以字节为 (44, 1)。为什么java在第一个字节中保存44?
【问题讨论】:
-
你希望它去哪里,为什么?
-
0x12c是0001_0010_1100。转换为byte仅保留int的最低有效8位,在您的示例中为0010_1100,等于44。 -
将
long向下转换为int时也是如此。如果您不熟悉它们,可能会遇到许多转换问题。在 Java 语言规范Kinds of Conversion 中阅读所有关于它们的信息。 -
感谢@Jacob 的回复。但是在 400(而不是 300 0x12c)的情况下,它会打印 -112 但它应该将 144 和 1 打印为 0001_1001_0000。
标签: java arrays type-conversion hex byte