You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 08:30:35