Это должно работать. Вы в основном получаете каждый два символа и анализируете его на int
, который также может быть интерпретирован как char
. Из этого вы создаете еще один декодированный String
.
String s = "FF505000010000000A00015634";
if (s.length() % 2 != 0) {
//odd amount, so wrong string. Throw exception.
}
String decoded = "";
int j = 0;
while (j < s.length()) {
String sub = s.substring(j, j + 2);
int i = Integer.parseInt(sub, 16);
decoded += (char)i;
j += 2;
}
System.out.println(decoded);
Мой выход был довольно случайным, но я считаю, что ваша тестовая строка не так уж и хороша.
Для Hello world!
, используйте:
String s = "48 65 6C 6C 6F 20 57 6F 72 6C 64 21";
s = s.replaceAll(" ", "");
Так что на самом деле происходит:
- Каждые два символа должны интерпретироваться как один символов.
- Итак, отрежьте
String
в двух экземплярах.
- Преобразование каждого двух шестнадцатеричных символов в фактическое значение
int
, что позволяет сделать фактическое преобразование.
- Добавляйте каждый символ от шестнадцатеричного до декодированного ASCII символа в новый декодированный
String
.
- Повторяйте до тех пор, пока у вас не будет всех символов в шестнадцатеричном формате
String
.
Ур вопрос не ясен. –
Дайте пример ввода/вывода. Вы можете избавиться от пробелов с помощью 'str = str.replaceAll (" \\ s + "," ");' – jlordo
Можете ли вы предоставить реальный текст в виде шестнадцатеричной строки, потому что FF505000010000000A00015634 не похож на текст ASCII, закодированный как шестнадцатеричный. –