填充十六进制到二进制转换,以便每个十六进制数字产生 4 位

Padding for Hex to Binary Conversion so each hex digit produces 4 bits

我有以下代码尝试用零填充二进制字符串:

int i = Integer.parseInt(input, 16);
String binaryString = Integer.toBinaryString(i);
String pad = String.format("%4s", Integer.toBinaryString(i)).replace(' ', '0');

当输入为 "1" 时,它会正确生成 "0001",但如果我添加一个额外的十六进制数字,它就不再添加填充。例如,"2F" 产生 "101111",但我希望它是 8 位,如 001011111

我该如何解决这个问题?

您的问题是您指定了 最小 宽度 4,但是 2F6位,所以产生了6个字符。

您可以:

  • 分别格式化每个十六进制数字并连接结果
  • 使格式宽度动态化 - 4 倍的十六进制数字
  • 使用基于字符串的方法
  • 其他

最简单的方法是基于字符串的方法,如果您将要求改写为 "always produce a multiple of 4 bits"。

这是您的操作方法:

String pad = String.format("%32s", Integer.toBinaryString(i)).replace(' ', '0')
    .replaceAll("^(0000)+", "");

不同之处在于我将输出更改为 32 个字符(int 可以达到的最大位数)并通过将 .replaceAll("^(0000)+", "") 添加到你的代码。

该正则表达式匹配“字符串开头出现 1 次或多次 0000”并且替换项为空白,因此匹配的任何内容都是 "deleted".