Язык: Русский

tools / hex

hex/

Перевод текста в шестнадцатеричный код (hex) и обратно. Кодировки UTF-8, GBK, UTF-16 и другие; на выходе можно выбрать разделитель, верхний регистр и префикс 0x или \x.

Текст

hex

Частые вопросы

Сколько байт занимает в hex буква кириллицы или иероглиф и почему результат отличается от других инструментов

Это зависит от кодировки. В UTF-8 буква кириллицы занимает 2 байта, например «Я» — это d0 af, а распространенный иероглиф — 3 байта, например 中 — это e4 b8 ad; в GBK и GB2312 иероглиф занимает 2 байта, и 中 — это d6 d0; эмодзи в UTF-8 занимает 4 байта. Латинские буквы и цифры и в UTF-8, и в GBK занимают 1 байт, поэтому результат одинаков. Если результат не совпадает с другим инструментом, проверьте, какую кодировку использует он. На этой странице по умолчанию выбрана UTF-8.

Что делать, если при переводе hex в текст пишет, что байты не являются допустимым текстом, или получаются «кракозябры»

Это значит, что байты закодированы не в текущей кодировке, поэтому попробуйте другую. Для китайского текста чаще всего подходят UTF-8 и GBK (старые программы и выгрузки из баз данных часто используют GBK); в hex в UTF-16 обычно много байтов 00. Кириллица в Windows-1251 или KOI8-R здесь не декодируется: этих кодировок в списке нет. Инструмент никогда не показывает недекодируемые байты в виде мусора. Единственное исключение — ISO-8859-1: каждый байт соответствует какому-то символу, поэтому ошибки не бывает, но китайский текст превращается в «кракозябры». GBK и GB2312 декодируются встроенным в браузер декодером GB18030, который мягче, чем в Python или Java, поэтому при выборе GB2312 тоже декодируются символы, которые есть только в GBK. Если байты изначально не были текстом (изображение, зашифрованные данные, хеш), ни одна кодировка их не декодирует.

Какие форматы понимает перевод hex в текст

Регистр букв не важен. Байты можно разделять пробелами, переводами строк, табуляциями, двоеточиями, запятыми или дефисами либо не разделять вовсе, а перед каждым байтом может стоять 0x или \x, поэтому 0x48,0x65 и \x48\x65 разбираются как есть. В каждой группе между двумя разделителями число цифр должно быть четным, поэтому пишите 0x01, а не 0x1. Любой символ, кроме 0-9 и a-f, тоже вызывает ошибку. Обе ошибки указывают позицию символа. Записи вроде U+4E2D и %E4%B8%AD не распознаются; для URL-кодирования используйте инструмент «URL: кодирование и декодирование» на этом сайте.

Как получить формат 0x48,0x65 или \x48\x65

Выберите разделитель «,» и префикс «0x» — получится 0x48,0x65, это можно вставить в массив байт на C или Java. Выберите разделитель «Нет» и префикс «\x» — получится \x48\x65, так записываются байты в строках Python и C. Префикс добавляется перед каждым байтом, поэтому разделитель «Нет» вместе с 0x даст 0x480x65, что обычно не нужно. «Верхний регистр» влияет только на a-f, буква x в 0x остается строчной.

Почему результат UTF-16 начинается с feff и отличается от других инструментов

UTF-16 выводится как в Java: в начале идет FE FF (метка порядка байт), дальше big-endian, поэтому 中 превращается в fe ff 4e 2d. UTF-16BE без метки — это 4e 2d: скопируйте результат и удалите первые два байта. UTF-32 — это big-endian без метки, поэтому 中 — это 00 00 4e 2d. При декодировании UTF-16 принимает в начале FE FF (big-endian) или FF FE (little-endian), а если метки нет, считает порядок big-endian.

Почему при выборе ASCII или ISO-8859-1 ввод кириллицы выдает ошибку

ASCII охватывает только коды от 0 до 127, а ISO-8859-1 — только до U+00FF (западноевропейские буквы с диакритикой, без кириллицы и иероглифов). Любой символ за пределами этого диапазона вызывает ошибку вида «Символ „Я“ нельзя закодировать в ASCII», а не заменяется молча на ?, как это делает getBytes в Java. GBK и GB2312 ведут себя так же: эмодзи и редкие символы, которых нет в таблице кодов, вызывают ошибку. Чтобы преобразовать их, выберите UTF-8 или GB18030.

Преобразуются ли пробелы и переводы строк во вводе

При переводе текста в hex — да. Преобразуется каждый символ в поле ввода, включая пробелы и переводы строк в начале и в конце: пробел — это 20, перевод строки — 0a. Текстовое поле браузера приводит переводы строк к \n, поэтому в многострочном тексте перевод строки превращается в 0a, а не в 0d 0a; если нужны окончания строк Windows, исправьте результат самостоятельно. При обратном переводе hex в текст пробельные символы в hex игнорируются, значение имеют только сами байты, а 0d 0a в результате тоже отображается как один перевод строки.

Отправляется ли введенный текст на сервер

Нет. Преобразование выполняется в браузере, запросы не отправляются, ничего не сохраняется.