У меня есть массив String. Я хочу преобразовать его в массив байтов. Я использую программу Java. Например:
String str[] = {"aa", "55"};
конвертировать в:
byte new[] = {(byte)0xaa, (byte)0x55};
Что я могу сделать?
У меня есть массив String. Я хочу преобразовать его в массив байтов. Я использую программу Java. Например:
String str[] = {"aa", "55"};
конвертировать в:
byte new[] = {(byte)0xaa, (byte)0x55};
Что я могу сделать?
(Извините, сначала должен быть комментарий, но я не могу комментировать еще из-за репутации, я здесь новый). Глядя на образец, я думаю, вы имеете в виду, что строковый массив на самом деле представляет собой массив из HEX-представления байтов, не так ли?
Если да, то для каждого строкового элемента я бы сделал следующее:
построить значение байта, где первый char - более высокие бит, а второй char - более низкие. Например.
int byteVal = (firstCharNumber << 8) | secondCharNumber;
String str = "Your string";
byte[] array = str.getBytes();
Преобразование строки в байтовый массив:
byte[] theByteArray = stringToConvert.getBytes();
Преобразование строки в байт:
String str = "aa";
byte b = Byte.valueOf(str);
Вы можете попробовать что-то похожее на это:
String s = "65";
byte value = Byte.valueOf(s);
Используйте метод Byte.ValueOf()
для всех элементов массива String, чтобы преобразовать их в значения байтов.
Долгий путь:). Я не знаю методов, чтобы избавиться от длинных операторов for
ArrayList<Byte> bList = new ArrayList<Byte>();
for(String ss : str) {
byte[] bArr = ss.getBytes();
for(Byte b : bArr) {
bList.add(b);
}
}
//if you still need an array
byte[] bArr = new byte[bList.size()];
for(int i=0; i<bList.size(); i++) {
bArr[i] = bList.get(i);
}
Поскольку ответа hex на однобайтное преобразование не было, вот мой:
private static byte hexStringToByte(String data) {
return (byte) ((Character.digit(data.charAt(0), 16) << 4)
| Character.digit(data.charAt(1), 16));
}
Использование образца:
hexStringToByte("aa"); // 170
hexStringToByte("ff"); // 255
hexStringToByte("10"); // 16
Или вы также можете попробовать Integer.parseInt(String number, int radix)
imo, лучше других.
// first parameter is a number represented in string
// second is the radix or the base number system to be use
Integer.parseInt("de", 16); // 222
Integer.parseInt("ad", 16); // 173
Integer.parseInt("c9", 16); // 201
String source = "testString";
byte[] byteArray = source.getBytes(encoding);
Вы можете запрограммировать и сделать то же самое со всеми строками в массиве.
Самый простой способ (с использованием Apache Common Codec):
byte[] bytes = Hex.decodeHex(str.toCharArray());
String str[] = {"aa", "55"};
byte b[] = new byte[str.length];
for (int i = 0; i < str.length; i++) {
b[i] = (byte) Integer.parseInt(str[i], 16);
}
Integer.parseInt(string, radix) преобразует строку в целое число, параметр radix указывает цифровую систему.
Используйте радиус 16, если строка представляет шестнадцатеричное число.
Используйте радиус 2, если строка представляет двоичное число.
Используйте радиус 10 (или опустить параметр radix), если строка представляет десятичное число.
Для получения дополнительной информации проверьте документы Java: https://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html#parseInt(java.lang.String,%20int)