2013-06-04 3 views
5

Ich habe eine Binärkette:eine große Binärkette Konvertierung auf hexadezimal

1010010111100101100010101010011011010001111100000010101000000000010000000111110111100" 

Wie kann ich es auf einen Hex-String-Format konvertieren?

Ich versuchte mit den Wrapper-Klassen Long und Integer, aber es hat nicht funktioniert für mich, werfen eine NumberFormatException.

+0

der Dezimalwert ermitteln dann Integer.toHexString (Wert) verwenden; – HectorLector

+4

mögliches Duplikat von [Eine Zeichenfolge, die einen binären Wert enthält, wird in Hex umgewandelt] (http://stackoverflow.com/questions/5759999/translating-a-string-containing-a-binary-value-to-hex) - Dies war die Das erste Google-Ergebnis, das 'java verwendet, konvertiert binäre Zeichenkette in Hex-Zeichenkette' –

+1

@JohnB Die Antwort dort bezieht sich auf die Verwendung von int/long, die in diesem Fall zu klein sind. – berry120

Antwort

10

Sie müssen dafür BigInteger verwenden - die Zahl ist zu groß, um in einen primitiven Wert zu passen. Die größte Zahl, die in einem long gespeichert werden kann, ist 9223372036854775807, während der entsprechende Wert in Dezimalzahl dieser binären Zeichenfolge viel größer ist, 25069592479040759763832764. Deshalb erhalten Sie die NumberFormatException.

So mit BigInteger:

String s = "1010010111100101100010101010011011010001111100000010101000000000010000000111110111100"; 
BigInteger b = new BigInteger(s, 2); 
System.out.println(b.toString(16)); 

... das gibt:

14bcb154da3e0540080fbc 
2

Da die Länge der binären String kann die Kapazität eines Integer oder Lang überschreiten, ist es am besten BigInteger verwenden . Denken Sie daran, dass ein Int in Java immer 32 Bit und 64 Bit lang ist.

String binaryString = "1010010111100101100010101010011011010001111100000010101000000000010000000111110111100"; 
String hexString = new BigInteger(binaryString, 2).toString(16); 
0

Wenn Sie große Zahlen verwenden:

String hexString = new BigInteger(binaryString, 2).toString(16); 
2
public static String convertBinaryToHex(String binInPut) { 
    int chunkLength = binInPut.length()/4, startIndex = 0, endIndex = 4; 
    String chunkVal = null; 
    for (int i = 0; i < chunkLength; i++) { 
     chunkVal = binInPut.substring(startIndex, endIndex); 
     System.out.println(Integer.toHexString(Integer.parseInt(chunkVal, 2))); 
     startIndex = endIndex; 
     endIndex = endIndex + 4; 
    } 

    return binInPut; 

}