2012-09-22 4 views
1

В следующей программе я преобразовываю шестнадцатеричную строку «ABCDEF» в двоичную.эффективное преобразование hex в двоичный

public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    String key = "ABCDEF"; //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

Вы всегда можете сделать статический запрос:

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)]; 
} 
+0

+1 Ницца! Не нужно усложнять вещи – gtgaxiola

+0

Спасибо, оба ответа верны в соответствии с моими требованиями, но я бы предпочел пойти на эффективный, спасибо :) – md1hunox

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

У него нет номера, у него есть строка. Итак, 'String.format ("% 04s ", Bin)'. –

+1

Это создаст строку из числа с заполнением. Проверьте его метод HexToBinary(), где он создает int i – gtgaxiola

+0

@Joao О, вы имели в виду переменную «yournumber», я просто давал общий пример метода() ... – gtgaxiola

Смежные вопросы