Java 如何在两个字节内转换大于256的十六进制值
我试图将大于255(无符号)的十六进制值存储到两个字节中。下面是示例代码:Java 如何在两个字节内转换大于256的十六进制值,java,arrays,type-conversion,hex,byte,Java,Arrays,Type Conversion,Hex,Byte,我试图将大于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 b
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
byte[] bytes = new byte[2];
ByteBuffer bbuf = ByteBuffer.wrap(bytes).order(ByteOrder.LITTLE_ENDIAN):
bbuf.putShort((short) 0x12c);
byte[] bytes = new byte[4];
ByteBuffer bbuf = ByteBuffer.wrap(bytes).order(ByteOrder.LITTLE_ENDIAN):
bbuf.putInt(0x12c);
System.out.println(Arrays.toString(bytes));
或者你自己计算
在这里,我们创建所需的两个字节,在其周围包装一个ByteBuffer,这样我们就可以读取和写入几个数字基元类型。您需要小的尾端字节顺序(首先是2c)。您需要将值存储到更大的数据类型(long或int)中,然后只获取前16个不重要的位
int raw = (int)0x12c;
int masked = raw & 0x00ff
System.out.println(masked);
您希望它放在哪里,为什么?
0x12c
是0001\u 0010\u 1100
。转换为字节
只保留int
的最低有效8位
,在您的示例中为0010_1100
,等于44
。将长
向下转换为int
时也是如此。如果您不熟悉,可能会遇到许多转换问题。阅读Java语言规范中关于它们的所有内容。感谢@Jacob的回复。但如果是400(而不是300 0x12c),它会打印-112,但它应该打印144和1作为0001_1001_0000。