我试图将大于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?
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);