Я пытаюсь преобразовать строку типа "testing123" в шестнадцатеричную форму в java. В настоящее время я использую BlueJ.
И преобразовать его обратно, это то же самое, кроме обратного?
Вот краткий способ преобразовать его в шестнадцатеричный формат:
public String toHex(String arg) {
return String.format("%040x", new BigInteger(1, arg.getBytes(/*YOUR_CHARSET?*/)));
}
BigInteger(int,byte[])
конструктор; в противном случае, если первый байт отрицательный, вы получите отрицательное значение BigInteger.Чтобы шестнадцатеричный код всегда был длиной 40 символов, значение BigInteger должно быть положительным:
источник
byte[] data = { -1, 1 };
- код в этом ответе работает нормально, тогда как с 17 голосами за него не удается.-1
из строки (как было запрошено в примере)?byte
s в вашем массиве.http://commons.apache.org/codec/apidocs/org/apache/commons/codec/binary/Hex.html
источник
Числа, которые вы кодируете в шестнадцатеричном формате, должны представлять некоторую кодировку символов, например UTF-8. Поэтому сначала преобразуйте String в byte [], представляющий строку в этой кодировке, а затем преобразуйте каждый байт в шестнадцатеричный.
источник
Использование
DatatypeConverter.printHexBinary()
:Пример использования:
Печать:
Примечание : это вызывает небольшие дополнительные проблемы с
Java 9
более новой версией, поскольку API не включен по умолчанию. Для справки, например, см. ЭтотGitHub
выпуск.источник
Вот другое решение
источник
format("%02x")
поэтому format () всегда использует 2 символа. Несмотря на то, что ASCII - это двузначный шестнадцатеричный код, то есть A = 0x65Все ответы, основанные на String.getBytes (), включают кодирование вашей строки в соответствии с Charset. Вы не обязательно получите шестнадцатеричное значение двухбайтовых символов , составляющих вашу строку. Если то, что вы действительно хотите, является эквивалентом шестнадцатеричного средства просмотра, вам необходимо получить доступ к символам напрямую. Вот функция, которую я использую в своем коде для отладки проблем с Unicode:
Затем stringToHex ("testing123") даст вам:
источник
Чтобы получить целочисленное значение шестнадцатеричного
источник
Вы можете вернуться
hexString
в этот момент с оговоркой, что ведущие нулевые символы будут удалены, и результат будет иметь нечетную длину, если первый байт меньше 16. Если вам нужно обработать эти случаи, вы можете добавить дополнительный код. для заполнения нулями:источник
Преобразование буквы в шестнадцатеричный код и шестнадцатеричный код в букву.
источник
Я бы предложил что-то вроде этого, где
str
ваша строка ввода:источник
Чтобы пойти другим путем (шестнадцатеричный в строку), вы можете использовать
источник
Сначала преобразуйте его в байты с помощью функции getBytes (), а затем преобразуйте его в шестнадцатеричный, используя это:
источник
Использование поддержки нескольких людей из нескольких потоков ..
Я знаю, что на это был дан ответ, но я хотел бы дать полный метод кодирования и декодирования для любых других в той же ситуации.
Вот мои методы кодирования и декодирования ..
источник
Намного лучше:
источник
источник
источник
Вот несколько тестов, сравнивающих разные подходы и библиотеки. Guava превосходит кодек Apache Commons при декодировании. Commons Codec превосходит Guava при кодировании. И JHex превосходит их как по декодированию, так и по кодированию.
Пример JHex
Все находится в одном файле класса для JHex . Не стесняйтесь копировать пасту, если вам не нужна еще одна библиотека в вашем дереве зависимостей. Также обратите внимание, что он доступен только как Java 9 jar, пока я не выясню, как опубликовать несколько целей выпуска с помощью Gradle и плагина Bintray.
источник
Преобразовать строку в шестнадцатеричный :
определенно это легкий путь.
источник
проверьте это решение для String в шестнадцатеричный и шестнадцатеричный в String, наоборот
Вывод следующий:
источник
Короткий и удобный способ преобразовать строку в ее шестнадцатеричное представление:
источник