2017-01-12 10 views
2

У меня есть один Base64 строку YxRfXk827kPgkmMUX15PNg== Я хочу, чтобы преобразовать его в 63145F5E4F36EE43E09263145F5E4F36Java конвертировать Base64 в шестнадцатеричной строки

Так что я думаю, что сценарий будет как этот я должен первой строки декодирования Base64 и чем превратить его в Hex

Мой код приведен ниже

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(); 
} 

Над кодом дает c_^O6?C??c_^O6

Но я не знаю. Как преобразовать эту строку в шестнадцатеричную строку. Таким образом, он дает выход 63145F5E4F36EE43E09263145F5E4F36.

Так что, пожалуйста, помогите мне исправить эту проблему.

+0

Вы кодировали байты в UTF-8. Я думаю, вы хотите, это строковое представление значений байтов в шестнадцатеричном формате. – Fildor

+0

вы можете посмотреть в [DatatypeConverter] (http://docs.oracle.com/javase/7/docs/api/javax/xml/bind/DatatypeConverter.html) .parseBase64Binary() и printHexBinary() – Rhayene

ответ

1

Эй попробовать этот код дает ожидаемый выход

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(); 
    } 

} 

Выход

63145F5E4F36EE43E09263145F5E4F36 
+0

Это очень похоже на решение в дублированном ответе. – Fildor

+0

какое преимущество вы видите в своем примере - вместо этого используете стандартные методы lib? – Rhayene

+0

@ Rhayene Ну, я использовал эту функцию для себя давно давным-давно видел вопрос и при предоставлении этого ввода 'String guid =" YxRfXk827kPgkmMUX15PNg == ";' функция дает ожидаемый результат, поэтому я ответил на вопрос –

5

Поскольку вы уже используете Apache Common Кодек:

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

Использование стандартных библиотек Java :

String guid = "YxRfXk827kPgkmMUX15PNg=="; 
byte[] decoded = Base64.getDecoder().decode(guid); 
System.out.println(String.format("%040x", new BigInteger(1, decoded))); 
Смежные вопросы