1

次のプログラムでは、16進文字列「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,

私が見つけた1つの方法は0x、各16進文字の前に追加することです。次のように:

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

もう1つの方法は、出力が4文字に満たない文字数を手動で確認し、それらの文字数0をそれに追加することです。しかし、上記のコードで前者を実装する方法がわかりません。上記でやろうとしていることを行うための効率的な方法はありますか?

4

3 に答える 3

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)));
}
于 2012-09-22T16:43:14.977 に答える
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)];
}
于 2012-09-22T17:21:03.537 に答える
2

単にaを使用し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-09-22T16:42:53.223 に答える