wake-up-neo.net

Hexadezierter String in Byte-Array

String str = "9B7D2C34A366BF890C730641E6CECF6F";

Ich möchte str in ein Byte-Array konvertieren, aber str.getBytes() gibt 32 Byte statt 16 zurück. 

32
Qaiser Mehmood

Ich denke, was der Fragesteller danach sucht, ist die Umwandlung der Zeichenfolgendarstellung eines Hexadezimalwerts in ein Byte-Array, das diesen Hexadezimalwert darstellt.

Der Apache-Commons-Codec hat eine Klasse dafür, Hex .

String s = "9B7D2C34A366BF890C730641E6CECF6F";    
byte[] bytes = Hex.decodeHex(s.toCharArray());
51
pap

Java SE 6 oder Java EE 5 bietet hierfür eine Methode, so dass keine zusätzlichen Bibliotheken erforderlich sind.

Die Methode ist DatatypeConverter.parseHexBinary

In diesem Fall kann es wie folgt verwendet werden:

String str = "9B7D2C34A366BF890C730641E6CECF6F";
byte[] bytes = DatatypeConverter.parseHexBinary(str);

Die Klasse bietet auch Typkonvertierungen für viele andere Formate, die normalerweise in XML verwendet werden.

36

Benutzen:

str.getBytes("UTF-16LE");
7
Eng.Fouad

Ich weiß, es ist spät, aber ich hoffe, es wird jemand anderem helfen ...

Dies ist mein Code: Er benötigt zwei mal zwei Hex-Darstellungen, die in String enthalten sind, und fügt diese in das Byte-Array .. _ hinzu.

public byte[] stringToByteArray (String s) {
    byte[] byteArray = new byte[s.length()/2];
    String[] strBytes = new String[s.length()/2];
    int k = 0;
    for (int i = 0; i < s.length(); i=i+2) {
        int j = i+2;
        strBytes[k] = s.substring(i,j);
        byteArray[k] = (byte)Integer.parseInt(strBytes[k], 16);
        k++;
    }
    return byteArray;
}
1

versuche dies:

     String str = "9B7D2C34A366BF890C730641E6CECF6F";
     String[] temp = str.split(",");
     bytesArray = new byte[temp.length];
     int index = 0;
     for (String item: temp) {
     bytesArray[index] = Byte.parseByte(item);
     index++;
     }
0
G M Ramesh

Ich gehe davon aus, dass Sie einen Hex-String in ein Byte-Array konvertieren müssen, das gleichbedeutend ist mit dem Hex-String? Das Hinzufügen dieser Methode sollte für Sie erledigt werden, ohne dass zusätzliche Bibliotheken importiert werden:

public static byte[] hexToByteArray(String s) {
     String[] strBytes = s.split("(?<=\\G.{2})");
     byte[] bytes = new byte[strBytes.length];
     for(int i = 0; i < strBytes.length; i++)
         bytes[i] = (byte)Integer.parseInt(strBytes[i], 16);
     return bytes;
}
0
Richard Smith

Das sollte den Trick tun:

byte[] bytes = toByteArray(Str.toCharArray());

public static byte[] toByteArray(char[] array) {
    return toByteArray(array, Charset.defaultCharset());
}

public static byte[] toByteArray(char[] array, Charset charset) {
    CharBuffer cbuf = CharBuffer.wrap(array);
    ByteBuffer bbuf = charset.encode(cbuf);
    return bbuf.array();
}
0
Jean Logeart