如何在两个字节中转换十六进制值超过256

问题描述 投票:-1回答:2

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

java arrays type-conversion hex byte
2个回答
0
投票
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优先)。


0
投票

您需要将值存储为更大的数据类型(long或int),然后只需要前16个无效位

int raw = (int)0x12c;
int masked = raw & 0x00ff
System.out.println(masked);
© www.soinside.com 2019 - 2024. All rights reserved.