将十六进制字符串 (十六进制)转换为二进制字符串

2022-09-01 10:24:14

我发现了以下十六进制到二进制转换的方式:

String binAddr = Integer.toBinaryString(Integer.parseInt(hexAddr, 16)); 

虽然此方法适用于小十六进制数,但十六进制数如下所示

A14AA1DBDB818F9759

抛出一个NumberFormatException.

因此,我写了以下似乎有效的方法:

private String hexToBin(String hex){
    String bin = "";
    String binFragment = "";
    int iHex;
    hex = hex.trim();
    hex = hex.replaceFirst("0x", "");

    for(int i = 0; i < hex.length(); i++){
        iHex = Integer.parseInt(""+hex.charAt(i),16);
        binFragment = Integer.toBinaryString(iHex);

        while(binFragment.length() < 4){
            binFragment = "0" + binFragment;
        }
        bin += binFragment;
    }
    return bin;
}

上述方法基本上采用十六进制字符串中的每个字符,并将其转换为其二进制等效焊盘,如有必要,请使用零将其连接到返回值。这是执行转换的正确方法吗?还是我忽略了可能导致我的方法失败的东西?

提前感谢您的任何帮助。


答案 1

BigInteger.toString(radix)会做你想做的事。只需以 2 的基数通过即可。

static String hexToBin(String s) {
  return new BigInteger(s, 16).toString(2);
}

答案 2

快速,适用于大字符串:

    private String hexToBin(String hex){
        hex = hex.replaceAll("0", "0000");
        hex = hex.replaceAll("1", "0001");
        hex = hex.replaceAll("2", "0010");
        hex = hex.replaceAll("3", "0011");
        hex = hex.replaceAll("4", "0100");
        hex = hex.replaceAll("5", "0101");
        hex = hex.replaceAll("6", "0110");
        hex = hex.replaceAll("7", "0111");
        hex = hex.replaceAll("8", "1000");
        hex = hex.replaceAll("9", "1001");
        hex = hex.replaceAll("A", "1010");
        hex = hex.replaceAll("B", "1011");
        hex = hex.replaceAll("C", "1100");
        hex = hex.replaceAll("D", "1101");
        hex = hex.replaceAll("E", "1110");
        hex = hex.replaceAll("F", "1111");
        return hex;
    }