String str = "9B7D2C34A366BF890C730641E6CECF6F";
Я хочу преобразовать str
в массив байтов, но str.getBytes()
возвращает 32 байта вместо 16.
String str = "9B7D2C34A366BF890C730641E6CECF6F";
Я хочу преобразовать str
в массив байтов, но str.getBytes()
возвращает 32 байта вместо 16.
Я думаю, что вопрос после этого преобразовывает строковое представление шестнадцатеричного значения в массив байтов, представляющий это шестнадцатеричное значение.
В коде для apache commons-codec есть класс для Hex.
String s = "9B7D2C34A366BF890C730641E6CECF6F";
byte[] bytes = Hex.decodeHex(s.toCharArray());
Java SE 6 или Java EE 5 предоставляет метод для этого, поэтому нет необходимости в дополнительных библиотеках.
Метод DatatypeConverter.parseHexBinary
В этом случае его можно использовать следующим образом:
String str = "9B7D2C34A366BF890C730641E6CECF6F";
byte[] bytes = DatatypeConverter.parseHexBinary(str);
Класс также предоставляет преобразования типов для многих других форматов, которые обычно используются в XML.
Использование:
str.getBytes("UTF-16LE");
Это должно сделать трюк:
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();
}
Держите его простым:
public Byte[] stringToByteArray (String s) {
Byte[] byteArray = new Byte[s.length()];
for (int i = 0; i < s.length(); i++) {
byteArray[i] = (byte) s.charAt(i);
}
return byteArray;
}
попробуйте следующее:
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++;
}
Я предполагаю, что вам нужно преобразовать шестнадцатеричную строку в массив байтов, равный которой означает то же самое, что и эта шестнадцатеричная строка? Добавление этого метода должно сделать это для вас без импорта дополнительной библиотеки:
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;
}
Я знаю это поздно, но надеюсь, что это поможет кому-то еще...
Это мой код: он принимает два-два шестнадцатеричных представления, содержащиеся в String, и добавляет их в массив байтов. Он отлично работает для меня.
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;
}