String str = "9B7D2C34A366BF890C730641E6CECF6F";
Je veux convertir str
en tableau d'octets, mais str.getBytes()
renvoie 32 octets au lieu de 16.
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());
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.
Utilisation:
str.getBytes("UTF-16LE");
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;
}
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++;
}
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;
}
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();
}