Java中整数转Little Endian十六进制结果异常的问题求助
解决Java整数转Little Endian十六进制时出现
ffff的问题 问题根源
Java里的byte是带符号的8位类型,范围是-128到127。当你处理小端字节数组里的0xD2(对应十进制-46)时,调用Integer.toHexString()会自动把这个byte提升为int类型——负数的高位会被补1,所以输出就变成了fffffdd2,而不是你想要的d2。
修复后的代码
直接修改循环里的输出逻辑,把byte转成无符号整数再处理:
private static void convertToHex() { int value = 1234; // 没必要转十六进制再解析,直接用原始值就行 ByteBuffer bb = ByteBuffer.allocate(4); bb.order(ByteOrder.LITTLE_ENDIAN); bb.putInt(value); System.out.print("x = "); for (byte b : bb.array()) { // 用b & 0xFF把带符号byte转成0-255的无符号整数,再格式化输出 System.out.printf("%02X ", b & 0xFF); } }
关键说明
- 删掉冗余操作:原代码里把1234转十六进制再转回int完全是多此一举,直接用原始整数就好。
- 无符号转换:
b & 0xFF能消除符号位的影响,让负数的byte被当作0-255之间的正数处理,避免高位补1。 - 格式化输出:
%02X会输出两位大写十六进制,不足两位自动补0;想要小写的话换成%02x就行。
运行这段代码,输入1234会得到x = D2 04 00 00,如果只需要前两个有效字节,你可以只遍历数组的前两位,或者过滤掉末尾的0字节再输出。
内容的提问来源于stack exchange,提问作者Jasmine
相关产品推荐
相关产品推荐

