Подтвердить что ты не робот

Как преобразовать строку в байт в Java

У меня есть массив String. Я хочу преобразовать его в массив байтов. Я использую программу Java. Например:

String str[] = {"aa", "55"};

конвертировать в:

byte new[] = {(byte)0xaa, (byte)0x55};

Что я могу сделать?

4b9b3361

Ответ 1

(Извините, сначала должен быть комментарий, но я не могу комментировать еще из-за репутации, я здесь новый). Глядя на образец, я думаю, вы имеете в виду, что строковый массив на самом деле представляет собой массив из HEX-представления байтов, не так ли?

Если да, то для каждого строкового элемента я бы сделал следующее:

  • проверьте, что строка состоит всего из двух символов
  • эти символы находятся в '0'.. '9' или 'a'.. 'f' интервал (учитывайте их случай также)
  • преобразовать каждый символ в соответствующее число, вычитая значение кода '0' или 'a'
  • построить значение байта, где первый char - более высокие бит, а второй char - более низкие. Например.

    int byteVal = (firstCharNumber << 8) | secondCharNumber;
    

Ответ 2

String str = "Your string";

byte[] array = str.getBytes();

Ответ 3

Преобразование строки в байтовый массив:

byte[] theByteArray = stringToConvert.getBytes();

Преобразование строки в байт:

 String str = "aa";

 byte b = Byte.valueOf(str);

Ответ 4

Вы можете попробовать что-то похожее на это:

String s = "65";

byte value = Byte.valueOf(s);

Используйте метод Byte.ValueOf() для всех элементов массива String, чтобы преобразовать их в значения байтов.

Ответ 5

Долгий путь:). Я не знаю методов, чтобы избавиться от длинных операторов 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);
}

Ответ 6

Поскольку ответа 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

Ответ 7

String source = "testString";
byte[] byteArray = source.getBytes(encoding); 

Вы можете запрограммировать и сделать то же самое со всеми строками в массиве.

Ответ 8

Самый простой способ (с использованием Apache Common Codec):

byte[] bytes = Hex.decodeHex(str.toCharArray());

Ответ 9

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)