Не используйте getBytes()
. Это не имеет ничего общего с декодированием шестнадцатеричных значений.
getBytes () возвращает один или несколько байтов для каждого символа в строке, используя кодировку базовой системы по умолчанию. Эта кодировка почти наверняка является либо UTF-8, либо windows -125x, что означает, что все символы в вашей строке будут иметь один соответствующий байт из-за того, как эти кодировки преобразуют символы в байты и из них.
Итак, ваш массив байтов будет иметь такие значения, что определенно не то, что вы хотите:
{
56, // codepoint for the '8' character
48, // codepoint for the '0' character
56, // codepoint for the '8' character
50, // codepoint for the '2' character
48, // codepoint for the '0' character
52, // codepoint for the '4' character
69, // codepoint for the 'E' character
// etc.
}
«Шестнадцатеричный» - это сокращение от шестнадцатеричного числа или основания 16. В базе 16, две цифры представляют байтовое значение, то есть значение от 0 до 2⁸ − 1. Вам нужно преобразовать каждые две цифры в однобайтовое значение.
Хотя для этого есть сторонние утилиты, это настолько просто, что вам действительно лучше сделать это вручную:
String s = "0x808204E039EFB76D96D3780BB507674";
// chop off "0x"
s = s.substring(2);
byte[] bytes = new BigInteger(s, 16).toByteArray();
Теперь массив байтов будет иметь значения, которые соответствуют байтам, представленным вашими шестнадцатеричными цифрами:
{
8, // 0x8
8, // 0x08
32, // 0x20
78, // 0x4E
3, // 0x03
-98, // 0x9E
// etc.
}