有效地将hex转换为二进制

时间:2012-09-22 16:40:07

标签: java binary hex

在以下程序中,我将十六进制字符串“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附加到其中。但我不知道如何在上面的代码中实现前者。是否有任何有效的方法可以做我上面尝试做的事情?

3 个答案:

答案 0 :(得分:6)

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)));
}

答案 1 :(得分:3)

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

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 :(得分:2)

只需使用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);
}