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

Java HashMap实现十六进制转二进制时键值输出异常求助

问题分析与解决方案

哦,我一眼就看出问题啦!你这里犯了两个关键错误,导致小于'8'的十六进制字符输出不符合预期:

1. 八进制字面量的陷阱

在Java中,以0开头的整数字面量会被解释为八进制数,而不是你以为的十进制或二进制。比如你写的0101,八进制转十进制的计算是:1*8² + 0*8¹ + 1*8⁰ = 64 + 0 + 1 = 65——这就是为什么输入'5'时,程序输出65而不是你想要的0101。

2. 存储类型选择错误

你把二进制值存成了整数类型,但整数会自动忽略前导零,而且无法直接表示固定四位的二进制格式。哪怕你用十进制的5(对应二进制0101),存成整数后输出的也是5,而不是带前导零的四位二进制字符串。

修正后的代码

把二进制值改成字符串类型存储,就能同时解决这两个问题:

HashMap<Character, String> hexToBinaryMap = new HashMap<>();
hexToBinaryMap.put('1', "0001");
hexToBinaryMap.put('2', "0010");
hexToBinaryMap.put('3', "0011");
hexToBinaryMap.put('4', "0100");
hexToBinaryMap.put('5', "0101");
hexToBinaryMap.put('6', "0110");
hexToBinaryMap.put('7', "0111");
hexToBinaryMap.put('8', "1000");
hexToBinaryMap.put('9', "1001");
hexToBinaryMap.put('A', "1010");
hexToBinaryMap.put('B', "1011");
hexToBinaryMap.put('C', "1100");
hexToBinaryMap.put('D', "1101");
hexToBinaryMap.put('E', "1110");
hexToBinaryMap.put('F', "1111");

这样修改后,当你调用hexToBinaryMap.get('5')时,会直接返回字符串"0101",完全符合十六进制转四位二进制的需求,也不会再出现八进制数值转换的问题。

内容的提问来源于stack exchange,提问作者William Scribner

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:20:08