有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

用于十六进制到二进制转换的java填充,因此每个十六进制数字产生4位

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

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

我该怎么解决这个问题


共 (1) 个答案

  1. # 1 楼答案

    您的问题是,您指定了4最小宽度,但2F6个位,因此生成了6个字符

    你可以:

    • 分别格式化每个十六进制数字,并连接结果
    • 使格式宽度动态化——是十六进制数字的4倍
    • 使用基于字符串的方法
    • 还有别的吗

    最简单的方法是基于字符串的方法,如果你重新表述你的需求“总是产生4位的倍数”

    以下是你如何做到这一点:

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

    不同之处在于,我将输出更改为32个字符(一个int可以达到的最大位),并通过向代码中添加.replaceAll("^(0000)+", "")一次删除前导零4

    正则表达式匹配“字符串开头的一个或多个0000”,替换项为空,因此任何匹配项都被“删除”