【问题标题】:efficiently converting hex to binary有效地将十六进制转换为二进制
【发布时间】:2012-09-14 18:32:19
【问题描述】:

在以下程序中,我将十六进制字符串“0123456789ABCDEF”转换为二进制。

public static void main(String[] args) {
    // TODO Auto-generated method stub
    String key = "0123456789ABCDEF"; //hexadecimal key
    char[] keyCharArray = key.toCharArray();
    for (int i = 0; i < key.length(); i++) {
        System.out.print(HexToBinary((keyCharArray[i]))+",");
    }
}

public static String HexToBinary(char Hex) {
    int i = Integer.parseInt(Character.toString(Hex), 16);
    String Bin = Integer.toBinaryString(i);
    return Bin;
}

我得到以下输出

0,1,10,11,100,101,110,111,1000,1001,1010,1011,1100,1101,1110,1111,

但我要求输出如下

0000,0001,0010,0011,0100,0101,0110,0111,1000,1001,1010,1011,1100,1101,1110,1111,

我发现的一种方法是在每个十六进制字符前附加0x。 如下:

0x0, 0x1, 0x2,............,0xE,0xF

另一种方法是手动检查输出有多少个字符不足 4,然后将那些0 附加到它上面。但是我不知道如何在上面的代码中实现前者。有没有什么有效的方法来做我上面想做的事情?

【问题讨论】:

    标签: java binary hex


    【解决方案1】:

    您始终可以进行静态查找:

    private static String[] staticLookup = new String[]
        {0000,0001,0010,0011,0100,0101,0110,0111,
         1000,1001,1010,1011,1100,1101,1110,1111};
    
    
    public static String HexToBinary(char Hex) {
        return staticLookup[Integer.parseInt(Character.toString(Hex), 16)];
    }
    

    【讨论】:

    • 谢谢,根据我的要求,两个答案都是正确的,但我宁愿选择高效的,谢谢 :)
    【解决方案2】:
    String.format("%04d", yournumber);
    

    要明确:

    public static String HexToBinary(char Hex) {
        int i = Integer.parseInt(Character.toString(Hex), 16);
        return String.format("%04d", Integer.parseInt(Integer.toBinaryString(i)));
    }
    

    【讨论】:

    • 他没有数字,他有一个字符串。所以,String.format("%04s", Bin).
    • 这将从带有填充的数字创建字符串。检查他创建 int i 的 HexToBinary() 方法
    • @Joao 哦,你的意思是变量“yournumber”,我只是给出了方法()的一般情况......
    • toBinaryString 返回一个字符串,而不是一个数字,所以我认为这会引发异常。用ss 替换你的ds,你就很成功了。 :)
    • 谢谢。但是,无论哪种方式,它都会抛出 java.util.FormatFlagsConversionMismatchException 异常
    【解决方案3】:

    只需使用switch 来确定缺失零的数量:

    switch(i){
        case 0: case 1: return "000" + Integer.toBinaryString(i);
        case 2: case 3: return "00" + Integer.toBinaryString(i);
        case 4: case 5: case 6: case 7:  return "0" + Integer.toBinaryString(i);
        default: return Integer.toBinaryString(i);
    }
    

    【讨论】:

      猜你喜欢
      • 2012-06-26
      • 2016-08-28
      • 2013-07-25
      • 1970-01-01
      相关资源
      最近更新 更多