2013-01-07 3 views
-4

У меня есть строка, которая содержит шестнадцатеричные числа Но я хочу, чтобы расшифровать их в текст и конвертировать их в строкуКак кодировать строку в Byte []

Если моя строка «FF505000010000000A00015634» Они в шестнадцатеричном, как я сделать их \ XFF \ x50 ... и так далее

Пожалуйста, помогите мне здесь

+0

Ур вопрос не ясен. –

+1

Дайте пример ввода/вывода. Вы можете избавиться от пробелов с помощью 'str = str.replaceAll (" \\ s + "," ");' – jlordo

+0

Можете ли вы предоставить реальный текст в виде шестнадцатеричной строки, потому что FF505000010000000A00015634 не похож на текст ASCII, закодированный как шестнадцатеричный. –

ответ

3

попробовать

String s = "FF505000010000000A00015634"; 
    s = s.replaceAll(" +", ""); 
    byte[] bytes = new BigInteger(s, 16).toByteArray(); 
+0

netbeans говорит мне создать класс для BigInteger? – junyi00

+1

Я не уверен насчет netbeans, но java.math.BigInteger принадлежит Java SE с версии 1.0 –

+0

oops, забудьте об импорте. Спасибо, я собираюсь проверить – junyi00

0

Это должно работать. Вы в основном получаете каждый два символа и анализируете его на 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(" ", ""); 

Так что на самом деле происходит:

  1. Каждые два символа должны интерпретироваться как один символов.
  2. Итак, отрежьте String в двух экземплярах.
  3. Преобразование каждого двух шестнадцатеричных символов в фактическое значение int, что позволяет сделать фактическое преобразование.
  4. Добавляйте каждый символ от шестнадцатеричного до декодированного ASCII символа в новый декодированный String.
  5. Повторяйте до тех пор, пока у вас не будет всех символов в шестнадцатеричном формате String.
1

Простой способ превратить текст в виде шестнадцатеричной строки в текст, чтобы использовать BigInteger.

String s = "Hello world!"; 
String hex = new BigInteger(s.getBytes(StandardCharsets.US_ASCII)).toString(16); 

hex = hex.replaceAll("\\s+", ""); // remove any whitespaces. 
String s2 = new String(new BigInteger(hex, 16).toByteArray(), StandardCharsets.US_ASCII); 
System.out.printf("\"%s\" as hex is %s, converted back is \"%s\"%n", s, hex, s2); 

печатает

"Привет, мир!" как шестнадцатеричный - 48656c6c6f20776f726c6421, конвертированный назад - «Привет, мир!».

Смежные вопросы