Java: преобразовать строку в строку, содержащую шестнадцатеричное число каждого символа - PullRequest
1 голос
/ 12 апреля 2011

У меня есть строка, в которой каждый байт является представлением шестнадцатеричного числа.

Я хочу создать новую строку, содержащую действительные шестнадцатеричные числа каждого символа.

Я знаю, что могу сделать String.getBytes(), чтобы получить байты каждого символа, я знаю, итерация по нему с i=0;i<=String.getBytes().length я не понимаю, как создать новую строку, в которой каждый символ представляет собой шестнадцатеричное число (0-F).

спасибо!

Ответы [ 3 ]

5 голосов
/ 12 апреля 2011

Вы могли бы сделать что-то вроде

String test = "hello world", result = "";

for (byte b : test.getBytes())
    result += Integer.toHexString(b) + " ";

System.out.println(result);

// result = 68 65 6c 6c 6f 20 77 6f 72 6c 64 

Имейте в виду, что строки в Java представлены в юникоде.

4 голосов
/ 12 апреля 2011

В вашем сообщении есть несколько неправильных представлений - или, по крайней мере, проблемных описаний:

  • Строки состоят из символов , а не байтов
  • Числа не являются шестнадцатеричными или десятичными и т. Д .; их представления являются шестнадцатеричными и т. д.

Затем вы звоните String.getBytes(), но не ясно, какую кодировку вы хотите использовать. Как указано выше, строка представляет собой последовательность символов . Чтобы преобразовать это в байт , вам нужно применить кодировку. К сожалению, String.getBytes() использует «кодировку платформы по умолчанию», которая почти никогда не является хорошим выбором. Вы всегда должны указывать, какую кодировку вы хотите использовать.

Когда вы преобразовали строку в байты (если вы определенно хотите это сделать), ее легко преобразовать в гекс:

for (byte b : test.getBytes("UTF-8"))
{
    int x = b & 0xff; // I suspect you don't want negative numbers
    System.out.println(Integer.toHexString(b));
}

В качестве альтернативы вы можете преобразовать каждый Unicode символ в его шестнадцатеричное представление:

for (char c : test.toCharArray())
{
    System.out.println(Integer.toHexString(c));
}

Обратите внимание, что Integer.toHexString не дополняет вывод до определенного количества символов.

Если бы вы могли дать больше информации о ваших входных и ожидаемых результатах, это действительно помогло бы.

2 голосов
/ 12 апреля 2011
  • commons-codec имеет Hex.encode(byteArray)
  • , вы также можете использовать Integer.toHexString(..) для каждого байта

Просто будьте осторожны при получении байтов.Используйте метод getBytes(ecnoding) вместо метода без аргументов, который принимает кодировку платформы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...