2017-07-21 2 views
-2

Ich versuche, eine ASCII-Zeichenfolge in HEX zu konvertieren. Aber aus irgendeinem Grund gibt es mir den ASCII-Wert anstelle des HEX-Wertes zurück.ASCII zu HEX Zeichenfolge in Java gibt ASCII-Wert zurück und nicht HEX

So, hier ist mein Code:

public String toHex(String strToConvert) { 
    ByteBuffer bb = ByteBuffer.wrap(strToConvert.getBytes("UTF-8")); 
    StringBuilder sb = new StringBuilder(); 
    while (bb.hasRemaining()) { 
     sb.append(bb.get()); 
    } 
    return sb.toString(); 
} 

Der Funktionsaufruf wird wie: toHex("A");. Was mache ich falsch?

+1

Wo erwartet Sie eine Konvertierung in Hex? Sie rufen im Grunde 'StringBuilder.append (int)' mit jedem Byte der Reihe nach auf. (Es ist nicht klar, warum Sie 'ByteBuffer' überhaupt benötigen.)' StringBuilder.append (int) 'ist dokumentiert als:" Hängt die String-Repräsentation des int-Arguments an diese Sequenz an. Der Gesamteffekt ist genau so Das Argument wurde durch die Methode 'String.valueOf (int)' in einen String umgewandelt, und die Zeichen dieses Strings wurden dann an diese Zeichenfolge angehängt. " Wo sagt das etwas über eine Hex-Konvertierung aus? –

Antwort

1

Es gibt nichts in Ihrem Code, der das Byte konvertiert Sie werden aus dem Puffer zu hexadezimal bekommen; Die sb.append(int) Methode, die Sie aufrufen, konvertiert es in Dezimal, nicht hexadezimal. Eine Lösung ist, dies zu tun:

sb.append(String.format("%02X", bb.get())); 

Beachten Sie, dass Ihre Methode aufrufen „ASCII hex“, aber sie sind nicht wirklich ASCII verwenden - Sie verwenden UTF-8, die nicht genau das gleiche wie ASCII.

2

Versuchen Sie es mit:

System.out.println(String.format("%02X", char_value))