2017-01-12 3 views
2

Ich habe einen Base64 String YxRfXk827kPgkmMUX15PNg== ich es in 63145F5E4F36EE43E09263145F5E4F36Java konvertieren Base64 zu Hex String

Also denken Sie konvertieren möchten ich Szenario wie dieses würde ich zum ersten Dekodierungs Base64-String haben und als wandeln es in Hex

ist mein Code unten angegeben

import org.apache.commons.codec.binary.Base64; 

String guid = "YxRfXk827kPgkmMUX15PNg=="; 
byte[] decoded = Base64.decodeBase64(guid); 
try { 
    System.out.println(new String(decoded, "UTF-8") + "\n"); 
} catch (UnsupportedEncodingException e1) { 
    e1.printStackTrace(); 
} 

Above Code gibt c_^O6?C??c_^O6

Aber ich weiß nicht, wie Sie diese Zeichenfolge in Hex-Zeichenfolge konvertieren. So gibt es den 63145F5E4F36EE43E09263145F5E4F36 Ausgang.

Bitte helfen Sie mir, dieses Problem zu beheben.

+0

Sie haben die Bytes in UTF-8 codiert. Was ich denke, Sie wollen, ist eine String-Darstellung der Byte-Werte in hex. – Fildor

+0

möchten Sie vielleicht in den [DatatypeConverter] (http://docs.oracle.com/javase/7/docs/api/javax/xml/bind/DatatypeConverter.html) .parseBase64Binary() und printHexBinary() – Rhayene

Antwort

1

Hey versuchen diesen Code gibt es die erwartete Ausgabe

import java.util.Base64; 

/** 
* 
* @author hemants 
*/ 
public class NewClass5 { 

    public static void main(String[] args) { 
     String guid = "YxRfXk827kPgkmMUX15PNg=="; 
     byte[] decoded = Base64.getDecoder().decode(guid); 
     System.out.println(toHex(decoded)); 
    } 
    private static final char[] DIGITS 
      = {'0', '1', '2', '3', '4', '5', '6', '7', 
       '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'}; 

    public static final String toHex(byte[] data) { 
     final StringBuffer sb = new StringBuffer(data.length * 2); 
     for (int i = 0; i < data.length; i++) { 
      sb.append(DIGITS[(data[i] >>> 4) & 0x0F]); 
      sb.append(DIGITS[data[i] & 0x0F]); 
     } 
     return sb.toString(); 
    } 

} 

Ausgabe

63145F5E4F36EE43E09263145F5E4F36 
+0

Das ist sehr sehr ähnlich der Lösung in der Duplikate Antwort. – Fildor

+0

Welchen Vorteil sehen Sie in Ihrem Beispiel - stattdessen die Verwendung von Standard-lib-Methoden? – Rhayene

+0

@Rhayene Nun habe ich diese Funktion für mich selbst vor langer Zeit sah die Frage und auf diesen Eingang geben 'String guid =" YxRfXk827kPgkmMUX15PNg == ";' auf die Funktion gibt die erwartete Ausgabe, so beantwortete ich die Frage –

5

Da Sie bereits verwenden Apache Commons Codec:

String guid = "YxRfXk827kPgkmMUX15PNg=="; 
byte[] decoded = Base64.decodeBase64(guid); 
String hexString = Hex.encodeHexString(decoded); 
System.out.println(hexString); 

Standard-Java-Bibliotheken verwenden :

String guid = "YxRfXk827kPgkmMUX15PNg=="; 
byte[] decoded = Base64.getDecoder().decode(guid); 
System.out.println(String.format("%040x", new BigInteger(1, decoded)));