2013-06-04 11 views
5

Mam ciąg binarny:Konwersja duży ciąg binarny na heksadecymalny

1010010111100101100010101010011011010001111100000010101000000000010000000111110111100" 

Jak mogę przekonwertować go na ciąg szesnastkowy?

Próbowałem z klasami otoki Long i Integer, ale to nie działało dla mnie, rzucając NumberFormatException.

+0

Oblicz wartość dziesiętną następnie użyć Integer.toHexString (wartość); – HectorLector

+4

możliwy duplikat [Tłumaczenie łańcucha zawierającego wartość binarną na Hex] (http://stackoverflow.com/questions/5759999/translating-a-string-containing-a-binary-value-to-hex) - To był bardzo pierwszy wynik Google przy użyciu 'java Konwertuj ciąg binarny na ciąg szesnastkowy' –

+1

@JohnB Odpowiedź tam odnosi się do użycia int/long, które są w tym przypadku zbyt małe. – berry120

Odpowiedz

10

Do tego celu należy użyć BigInteger - liczba jest zbyt duża, aby zmieścić się w wartości pierwotnej. Największa liczba, jaką można zapisać w jednostce long, to 9223372036854775807, podczas gdy równoważna wartość dziesiętna tego ciągu binarnego jest znacznie większa, 25069592479040759763832764. Właśnie dlatego uzyskujesz NumberFormatException.

Więc z BigInteger:

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

... co daje:

14bcb154da3e0540080fbc 
2

Jako długość ciąg binarny może przekroczyć pojemność całkowitą lub długi, to najlepiej użyć BigInteger . Pamiętaj, że w Javie int ma zawsze 32 bity, a długie 64 bity.

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

Jeśli używasz wielkich liczb:

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; 

}