Java十六进制转二进制函数问题:需输出完整8位字节
十六进制转8位二进制补前导零的解决办法
你的问题是当前Java函数转换十六进制字符串时,返回的二进制缺少前导零,比如输入"3C"得到"111100",但需要8位的"00111100"。以下是几种可行的修改方案:
方案1:用String.format补前导零
直接在转换后的二进制字符串基础上,通过格式化补全到8位,将填充的空格替换为0:
public static String hexToBinary(String hex) { int i = Integer.parseInt(hex, 16); String bin = Integer.toBinaryString(i); // 格式化字符串到8位,空格填充后替换为0 return String.format("%08s", bin).replace(' ', '0'); }
方案2:结合位运算确保取低8位(更严谨)
如果输入的十六进制可能超过2位(对应8位二进制),可以先通过位运算保留低8位,再格式化输出:
public static String hexToBinary(String hex) { int i = Integer.parseInt(hex, 16); // 保留低8位,避免高位数值干扰 int byteValue = i & 0xFF; // 格式化8位二进制,自动补前导零 return String.format("%8s", Integer.toBinaryString(byteValue)).replace(' ', '0'); }
方案3:手动计算补零长度
通过计算当前二进制字符串的长度,补充对应数量的前导零;如果长度超过8位则截取最后8位:
public static String hexToBinary(String hex) { int i = Integer.parseInt(hex, 16); String bin = Integer.toBinaryString(i); // 计算需要补的零的数量 int leadingZeros = 8 - bin.length(); if (leadingZeros > 0) { return "0".repeat(leadingZeros) + bin; } // 长度超过8位时取最后8位 return bin.substring(bin.length() - 8); }
测试以上任一方法,输入"3C"都会返回00111100,满足需求。
内容的提问来源于stack exchange,提问作者Rawan Khedr
相关产品推荐
相关产品推荐

