2013-02-28 106 views
-2

我需要從該字節數組中取出十六進制數字並將它們轉換爲二進制,然後將所有二進制文件放入一個字符串中。 A十六進制到二進制到字符串

public static void main (String[] args) 
{ 
    String binary; 
    byte [] ex; 
    ex = new byte [] {(byte)0xFF, (byte)0x11, (byte)0xEE, (byte)0x22, (byte)0xDD, (byte)0x33, (byte)0xCC, (byte)0x44}; 
    printByteArray(ex); 
    binary = hexToBin(ex); 
    System.out.println(binary); 
} 

public static String hexToBin(byte [] array) 
{ 
    String binStr = null; 
    for(int i = 0; i < array.length; i++) 
    { 
     binStr.append(Integer.toBinaryString(array[i])); 
    } 
    return binStr; 
} 

但由於我初始化字符串(我的第一次嘗試)的事實,我的輸出中有'null'。任何想法如何解決這個問題?此外,我只是將它改爲追加以解決我與null有關的問題,現在我不知道爲什麼,但它不會讓我使用它。

* 編輯編輯編輯編輯編輯*

好是工作所以現在我有:

public static void main (String[] args){ 

    String binary; 
    String binary2; 
    byte [] ex; 
    byte [] wx; 
    ex = new byte [] {(byte)0xFF, (byte)0x11, (byte)0xEE, (byte)0x22, (byte)0xDD, (byte)0x33, (byte)0xCC, (byte)0x44}; 
    wx = new byte [] {(byte)0x12, (byte)0xCD, (byte)0xD8, (byte)0x53, (byte)0xFA, (byte)0x01, (byte)0x1C, (byte)0x40}; 
    printByteArray(ex); 
    binary = hexToBin(ex); 
    System.out.println(binary); 
    binary2 = hexToBin(wx); 
    System.out.println(binary2); 

} 

public static String hexToBin(byte [] array) 
{ 
    StringBuilder binStr = new StringBuilder(); 
    for(int i = 0; i < array.length; i++){ 
     binStr.append(Integer.toBinaryString(array[i])); 
    } 
    return binStr.toString(); 
} 

,但是這是我的輸出:

11111111111111111111111111111111100011111111111111111111111111110111010001011111111111111111111111111011101110011111111111111111111111111110011001000100 
1001011111111111111111111111111001101111111111111111111111111110110001010011111111111111111111111111111110101111001000000 

任何想法,爲什麼他們是差距?我怎麼能讓他們這樣他們是相同的長度。就像第一個FF應該是'11111111',但是如果我在轉換它們時在數組中的單獨字節之間放置空格,FF會變成'1111111111111111111111111111111111111111111111111',我只想要8位表示。

回答

2

您可以只使用一個StringBuilder更換binStrString類型:

public static String hexToBin(byte[] array) { 
    StringBuilder binStr = new StringBuilder(); 
    for (int i = 0; i < array.length; i++) { 
     binStr.append(Integer.toBinaryString(array[i])); 
    } 

    return binStr.toString(); 
} 

更新:

由於toBinaryString不離開墊用零您可能需要使用(8-位LHS填充):

String binaryString = String.format("%8s", Integer.toBinaryString(array[i] & 0xFF)).replace(' ', '0'); 
binStr.append(binaryString); 
+0

我是否必須更改公共靜態_String_以及聖ringBuilder?並會附加工作? – erp 2013-02-28 01:07:15

+0

不,您可以返回[StringBuilder#toString](http://docs.oracle.com/javase/7/docs/api/java/lang/StringBuilder.html#toString())的結果,它是一個'String ' – Reimeus 2013-02-28 01:08:42

+0

不會工作,因爲toBinaryString沒有留下零填充 – Bohemian 2013-02-28 01:21:07

相關問題