填充十六进制到二进制转换,以便每个十六进制数字产生 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
,但是 2F
有 6位,所以产生了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".
我有以下代码尝试用零填充二进制字符串:
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
,但是 2F
有 6位,所以产生了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".