web-dev-qa-db-fra.com

Tableau codé en hexadécimal en tableau d'octets

String str = "9B7D2C34A366BF890C730641E6CECF6F";

Je veux convertir str en tableau d'octets, mais str.getBytes() renvoie 32 octets au lieu de 16. 

32
Qaiser Mehmood

Je pense que le questionneur est après la conversion de la représentation sous forme de chaîne d'une valeur hexadécimale en un tableau d'octets représentant cette valeur hexadécimale.

Le codec Apache commons a une classe pour cela, Hex .

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

Java SE 6 ou Java EE 5 fournit une méthode pour le faire maintenant, évitant ainsi l'utilisation de bibliothèques supplémentaires.

La méthode est DatatypeConverter.parseHexBinary

Dans ce cas, il peut être utilisé comme suit:

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

La classe fournit également des conversions de types pour de nombreux autres formats généralement utilisés en XML.

36

Utilisation:

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

Je sais qu'il est tard, mais j'espère que cela aidera quelqu'un d'autre ...

Voici mon code: Il faut deux par deux représentations hexadécimales contenues dans String et les ajouter dans un tableau d'octets . Cela fonctionne parfaitement pour moi.

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
Vjeran Živković

essaye ça:

     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

Je suppose que vous avez besoin de convertir une chaîne hexadécimale en un tableau d'octets équivalent à la même chose que cette chaîne hexagonale?

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

Cela devrait faire l'affaire :

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