Перейти к содержимому
Шестнадцатеричная система счисления (hex) простыми словами
blogQRcode.website117 мин чтения

Шестнадцатеричная система счисления (hex) простыми словами

#шестнадцатеричная система#hex#системы счисления#коды цветов#байт#hex-дамп#MAC-адрес#кодирование данных

Шестнадцатеричная система счисления — это способ записи чисел, в котором используется не десять знаков, а шестнадцать: цифры от 0 до 9 и буквы от A до F. Её сокращённо называют hex (от hexadecimal). Сталкивался с ней каждый, кто хоть раз открывал палитру в графическом редакторе и видел там #FF5733, смотрел на MAC-адрес роутера вида A4:5E:60:C1:0B:7F или получал от Windows ошибку 0x80070005.

Разобраться в hex проще, чем кажется. Нужно запомнить шесть букв, одно правило про разряды и один факт: две шестнадцатеричные цифры — это ровно один байт.

Что такое шестнадцатеричная система счисления

Любая позиционная система счисления определяется одним числом — основанием. Основание говорит, сколько разных цифр в ней есть и во сколько раз каждый следующий разряд «тяжелее» предыдущего. У привычной десятичной системы основание 10: цифры 0–9, разряды идут как единицы, десятки, сотни, тысячи. У шестнадцатеричной основание 16: знаков шестнадцать, а разряды растут как 1, 16, 256, 4096.

Проблема была только в одном: арабских цифр всего десять, а знаков нужно шестнадцать. Недостающие шесть взяли из латинского алфавита — A, B, C, D, E, F. Никакой магии здесь нет, это просто удобные символы, которые есть на любой клавиатуре и в любой кодировке.

Ключевое: A в hex — это не буква в тексте, а число 10. F — это 15. И на бумаге, и в памяти компьютера значение 1F — это обычное целое число, равное 31, просто записанное другими знаками. Само число от системы записи не меняется, меняется только его внешний вид: 31, 11111 в двоичной и 1F в шестнадцатеричной — это одно и то же количество.

Шестнадцатеричная система — одна из четырёх, которые реально встречаются в вычислительной технике: двоичная, восьмеричная, десятичная и hex. Их общая логика, основания и правила пересчёта между собой подробно разобраны в обзоре про системы счисления — здесь же речь идёт только о шестнадцатеричной и о том, где вы её увидите на практике.

Почему в hex появились буквы A–F

Причина простая до банальности: закончились цифры. Чтобы система с основанием 16 работала, в каждом разряде должно помещаться шестнадцать разных значений — от нуля до пятнадцати. Десятичные цифры покрывают только диапазон 0–9. Значения 10, 11, 12, 13, 14 и 15 нельзя записать двумя знаками, иначе 12 в одном разряде было бы не отличить от двух разрядов 1 и 2.

Поэтому для шести оставшихся значений ввели однознаковые обозначения. Взяли первые буквы латиницы подряд — так проще запоминать и упорядочивать.

HexДесятичноеДвоичное (4 бита)HexДесятичноеДвоичное (4 бита)
000000881000
110001991001
220010A101010
330011B111011
440100C121100
550101D131101
660110E141110
770111F151111

Регистр букв значения не имеет: ff, FF и Ff — одно и то же число 255. Разные среды придерживаются разных привычек. В CSS цвета чаще пишут строчными (#e8f0fe), в дампах и адресах памяти — прописными (0x7FFE), в MAC-адресах встречаются оба варианта. На результат это не влияет, но внутри одного проекта регистр лучше держать единым, иначе строковое сравнение цветов начнёт выдавать ложные различия.

Как читать шестнадцатеричное число

Правило то же, что в десятичной записи, только вес разряда растёт не в десять раз, а в шестнадцать. Самый правый разряд весит 1, следующий — 16, дальше 256, затем 4096.

Пример на двух знаках. Число 2F: левый разряд — цифра 2 с весом 16, правый — F, то есть 15, с весом 1. Считаем: 2 × 16 + 15 = 47. Значит, 2F — это десятичное 47.

Пример на трёх знаках. Число 1A3: 1 × 256 + 10 × 16 + 3 = 256 + 160 + 3 = 419.

Ещё один, который встречается постоянно: FF — это 255, максимум для одного байта. Отсюда и диапазон яркости 0–255 в цветах.

Быстрая проверка на глаз: одна hex-цифра — это значение от 0 до 15, две — от 0 до 255, четыре — от 0 до 65 535. Каждая добавленная цифра умножает диапазон на шестнадцать.

Как отличить hex от обычного числа

Запись 10 сама по себе неоднозначна: в десятичной это десять, в hex — шестнадцать. Чтобы не путаться, шестнадцатеричные числа помечают. Обозначений исторически накопилось много, и все они встречаются до сих пор.

Форма записиПримерГде встречается
0x в начале0x1FC, C++, Java, Python, JavaScript, коды ошибок Windows
# в начале#FF5733Цвета в CSS, HTML, графических редакторах
суффикс h1FhАссемблер архитектуры x86
$ в начале$1FPascal, Delphi, ассемблер Motorola
\x внутри строки"\x41"Экранированные символы в строках и regex
% в начале байта%D0%9FПроцентное кодирование в URL
U+U+0416Номера символов в Unicode

Без пометки смысл задаёт контекст: шесть знаков в поле цвета — точно hex, число в графе «количество» — десятичное. Буква A–F в строке почти всегда означает hex, но обратное неверно: 0x120 букв не содержит, а всё равно hex и равен 288.

Систематический пересчёт из hex в двоичную, восьмеричную и обратно, включая деление в столбик и таблицы соответствия, вынесен в обзорную статью про системы счисления. Для чтения hex в повседневных задачах хватает умения посчитать вес разрядов и знания таблицы A–F.

Байт, ниббл и почему hex подружился с компьютерами

Компьютер хранит всё в битах — нулях и единицах. Записывать длинные двоичные последовательности человеку неудобно: 11010110 01001111 невозможно прочитать вслух, легко ошибиться на один разряд и почти нереально сравнить два таких значения глазами.

Здесь и обнаруживается главное свойство hex: 16 = 2⁴. Одна шестнадцатеричная цифра точно соответствует четырём битам. Четыре бита называют ниббл (иногда — полубайт), и таких значений ровно шестнадцать: от 0000 до 1111, то есть от 0 до F.

Из этого следует главное практическое правило: один байт = две шестнадцатеричные цифры. Байт — это восемь бит, восемь бит — два ниббла, два ниббла — два знака hex. Диапазон значений байта 0–255 записывается как 00FF.

Перевод в обе стороны делается механически, без арифметики. Двоичное 11010110 режем пополам: 1101 и 0110. По таблице выше 1101 = D, 0110 = 6. Получаем D6. Обратно так же: D6 → D это 1101, 6 это 011011010110. Ни делений, ни остатков.

Практическая выгода очевидна на длинах. Ключ шифрования на 128 бит — это 16 байт, то есть 32 знака в hex вместо 128 нулей и единиц. Хеш SHA-256 — 64 hex-знака вместо 256 бит. MD5 — 32 знака. Именно поэтому все хеши, отпечатки сертификатов и идентификаторы устройств публикуют в шестнадцатеричном виде: запись компактна, а глазами сверить две строки по 32 знака реально.

HEX-коды цветов: как читать #FF5733

Самое массовое применение шестнадцатеричной системы за пределами программирования — цвета. Любой веб-цвет описывается тремя каналами: красным, зелёным и синим (модель RGB). Каждый канал — это яркость от 0 до 255, то есть ровно один байт, то есть ровно две hex-цифры.

Отсюда формат #RRGGBB: решётка, затем две цифры на красный, две на зелёный, две на синий. Всего шесть знаков.

Разберём #FF5733:

  • FF — красный канал, 255, максимум;
  • 57 — зелёный канал, 5 × 16 + 7 = 87;
  • 33 — синий канал, 3 × 16 + 3 = 51.

В привычной записи это rgb(255, 87, 51) — насыщенный оранжево-красный. Красного максимум, зелёного треть, синего почти нет. Всего сочетаний получается 256 × 256 × 256 = 16 777 216, это и есть 24-битный «истинный цвет» (True Color): шесть hex-знаков покрывают весь диапазон без остатка.

Опорные значения, которые полезно узнавать сразу

КодRGBЦветЛогика
#0000000, 0, 0ЧёрныйВсе каналы в нуле
#FFFFFF255, 255, 255БелыйВсе каналы на максимуме
#FF0000255, 0, 0Чистый красныйТолько первая пара
#00FF000, 255, 0Чистый зелёныйТолько вторая пара
#0000FF0, 0, 255Чистый синийТолько третья пара
#808080128, 128, 128Средний серыйВсе каналы равны — оттенок серого
#FFFF00255, 255, 0ЖёлтыйКрасный плюс зелёный
#00FFFF0, 255, 255ГолубойЗелёный плюс синий

Правило серого: если все три пары одинаковы (#1A1A1A, #E0E0E0), цвет всегда серый. Как только пары расходятся, появляется оттенок.

Сокращённая запись из трёх знаков

В CSS допустима форма #RGB: каждый знак дублируется. #F53 разворачивается в #FF5533, #000 — в #000000, #FFF — в #FFFFFF. Сократить можно далеко не любой цвет: #FF5733 в три знака не сворачивается, потому что пара 57 состоит из разных цифр.

Восемь знаков: прозрачность

Современный CSS понимает форму #RRGGBBAA, где последняя пара — альфа-канал, то есть непрозрачность. FF — полностью непрозрачный, 00 — полностью прозрачный, 80 — примерно половина. Запись #FF573380 означает тот же оранжевый при полупрозрачности.

Ловушка: порядок каналов в восьмизначной записи не универсален. В CSS альфа идёт последней (RGBA), а в Android цветовые константы традиционно записывают как ARGB — альфа первой. Один и тот же набор из восьми знаков в разных средах даёт разный результат, поэтому при переносе палитры из макета в код порядок стоит проверять явно.

Hex-цвета в QR-кодах и на этикетках

В генераторах кодов цвет модулей и фона тоже задаётся шестнадцатеричным значением. И здесь есть техническое ограничение, которого нет в вебе: сканеру нужен контраст между тёмными и светлыми модулями. Слишком светлый код (например, #B0B0B0 на белом #FFFFFF) камера может не распознать, а инверсия — светлые модули на тёмном фоне — работает не на всех считывателях. Практическое правило: тёмный элемент держать ближе к #000000, чем к середине шкалы, а фон — светлым. Подробности про допустимые цвета, логотип в центре и границы искажений собраны в материале про QR-код с логотипом. Подобрать оттенки и сразу проверить результат можно в генераторе QR-кодов.

Адреса памяти, MAC-адреса и IPv6

Второе большое применение hex — адреса и идентификаторы. Причина та же: адрес по своей природе двоичный, а шестнадцатеричная запись сжимает его в четыре раза без потери структуры.

Адреса памяти

Указатели и адреса в отладчиках всегда показывают в hex: 0x00007FFE1A2B3C40. Шестнадцать знаков — это 64 бита, разрядность современных процессоров. В 32-битных системах адрес занимал восемь знаков.

Удобство не только в компактности. Границы блоков памяти в hex выглядят круглыми числами: страница памяти в 4 килобайта — это 0x1000 (4096 байт), мегабайт — 0x100000. Если адрес заканчивается на 000, он выровнен по границе страницы, и это видно мгновенно. В десятичной записи 4096 и 1 048 576 такой наглядности не дают.

Оттуда же растут коды ошибок вида 0x80070005: это упакованное в 32 бита значение, где группы битов кодируют тип ошибки и подсистему-источник. Конкретно эта комбинация в Windows обычно означает отказ в доступе.

MAC-адреса

Физический адрес сетевого устройства — 48 бит, то есть 6 байт, то есть 12 шестнадцатеричных знаков. Записывают их парами через двоеточие: A4:5E:60:C1:0B:7F. В оборудовании Cisco — по четыре знака через точку: a45e.60c1.0b7f.

Первые три байта — идентификатор производителя (OUI), который выдаёт IEEE. По ним онлайн-справочники определяют вендора сетевой карты. Последние три байта производитель назначает сам. Адрес FF:FF:FF:FF:FF:FF — широковещательный: кадр с таким получателем адресован всем устройствам сегмента сети.

По той же схеме читаются идентификаторы бесконтактных карт и меток: UID карты доступа или RFID-метки почти всегда выводится как строка hex вроде 04 A2 3B 91 5C 60 80. Как эти идентификаторы используются в системах доступа, разобрано в статье про СКУД и RFID-пропуска.

IPv6

Адрес IPv6 — 128 бит, записанных как восемь групп по четыре hex-знака через двоеточие: 2001:0db8:85a3:0000:0000:8a2e:0370:7334. Ведущие нули в группе можно опускать, а одну самую длинную цепочку нулевых групп — заменить двойным двоеточием: 2001:db8:85a3::8a2e:370:7334.

Hex-дамп: как выглядит файл изнутри

Любой файл — это последовательность байтов. Программы-редакторы, которые показывают эти байты напрямую, называют hex-редакторами, а результат вывода — hex-дампом. Выглядит он обычно так: слева столбец смещения (позиция от начала файла), в середине 16 байт строки в шестнадцатеричном виде, справа те же байты, показанные как текст, где непечатаемые символы заменены точкой.

Пример строки дампа:

00000000  89 50 4E 47 0D 0A 1A 0A  00 00 00 0D 49 48 44 52  |.PNG........IHDR|

Первые байты файла называют сигнатурой или магическим числом. По ним операционные системы и антивирусы определяют реальный тип файла — независимо от того, какое у него расширение. Если файл назван otchet.pdf, а начинается с 50 4B 03 04, это ZIP-архив, а не PDF.

Первые байты (hex)Как читается в текстеФормат
25 50 44 46%PDFPDF-документ
89 50 4E 47 0D 0A 1A 0A.PNG....Изображение PNG
FF D8 FFИзображение JPEG
47 49 46 38GIF8Изображение GIF
50 4B 03 04PK..ZIP, а также DOCX, XLSX, APK
52 61 72 21Rar и знак 21Архив RAR

Правая колонка дампа опирается на кодировку: один и тот же байт покажется буквой, цифрой или точкой в зависимости от того, по какой таблице его читают. Какому символу соответствует конкретный код — вопрос кодировки, а не самой шестнадцатеричной записи: состав и диапазоны разобраны в материале про таблицу ASCII.

С кириллицей сложнее: в UTF-8 русская буква занимает два байта. Строчная «р» имеет номер U+0440 и хранится как D1 80, буква «Ж» — U+0416, байты D0 96. Отсюда простое наблюдение: если в дампе текстового файла русские буквы идут парами байтов, начинающихся с D0 или D1, это UTF-8. Если каждая русская буква занимает один байт из верхней половины таблицы, это однобайтовая кодировка вроде Windows-1251.

Открыть дамп можно бесплатным редактором HxD под Windows или командой в терминале: xxd и hexdump в Linux и macOS, Format-Hex в PowerShell.

Где ещё встречается hex

Список мест, где шестнадцатеричная запись стала стандартом де-факто, довольно длинный. Вот то, с чем сталкиваются чаще всего.

  • Хеши и контрольные суммы. CRC32 выводится восемью знаками, MD5 — тридцатью двумя, SHA-256 — шестьюдесятью четырьмя. Именно в hex их публикуют рядом со ссылками на скачивание.
  • Отпечатки сертификатов и ключей. Fingerprint TLS-сертификата или SSH-ключа — та же строка байтов в шестнадцатеричном виде, часто разделённая двоеточиями.
  • URL-кодирование. Символы, недопустимые в адресе, заменяются на знак процента и два hex-знака: пробел становится %20, слэш — %2F. Русская буква в UTF-8 превращается в две такие пары: «П» записывается как %D0%9F.
  • HTML-сущности. Символ можно вставить по номеру: A даёт латинскую A, ❤ — символ сердца.
  • Escape-последовательности в коде. В строках языков программирования \x41 означает байт 0x41, а \u0416 — символ Unicode по номеру.
  • Служебные разделители в кодах маркировки. В DataMatrix-кодах системы «Честный знак» группы данных разделяются служебным символом GS с кодом 0x1D, невидимым при печати. Из-за него скопированный из сканера код в текстовом поле выглядит «слипшимся». Структура такого кода разобрана в статье о том, как расшифровать код маркировки DataMatrix.
  • Прошивки. Формат Intel HEX — текстовый файл из шестнадцатеричных записей, которым прошивают память устройств.
  • Отладочные маркеры. Значения вроде 0xDEADBEEF служат заметными метками в памяти: они собраны из букв A–F и читаются как слова.

Частые ошибки при чтении hex

Ошибки при работе с шестнадцатеричной записью почти всегда однотипны.

  • Читают hex как десятичное. Классика: видят 20 и думают «двадцать», хотя это 32. Проверяйте пометку — 0x, #, h.
  • Путают ноль и букву O. В hex буквы O не существует: допустимы только A–F. Если в строке попалась O, это либо ноль, либо строка не шестнадцатеричная.
  • Теряют ведущий ноль. В цвете каждая пара обязана быть двузначной: #0F0F0F и #F0F0F0 — совершенно разные цвета, а запись из пяти знаков невалидна.
  • Путают #RGB и #RRGGBB. Трёхзначная форма дублирует знаки, а не дописывает нули: #123 — это #112233, а не #123000.
  • Меняют порядок каналов. RGBA и ARGB дают разный цвет при одинаковых восьми знаках. Особенно часто ловится при переносе палитры между вебом и мобильным приложением.
  • Считают нечётное число знаков байтами. Байты всегда идут парами. Если в строке дампа или ключа нечётное количество символов, где-то потерян знак.
  • Сравнивают строки вместо значений. #FFF, #ffffff и rgb(255,255,255) — один и тот же белый, но текстовое сравнение объявит их разными. Приводите к одной форме перед сравнением.

Шпаргалка по hex

  • Основание 16, знаки 0–9 и A–F. A = 10, F = 15.
  • Одна hex-цифра = 4 бита (ниббл). Две hex-цифры = один байт = 0–255.
  • Вес разрядов справа налево: 1, 16, 256, 4096.
  • FF = 255, 0x100 = 256, 0x1000 = 4096.
  • Пометки: 0x в коде, # в цветах, h в ассемблере, U+ в Unicode.
  • Регистр букв не важен, но внутри проекта держите его единым.
  • Цвет #RRGGBB: пары каналов красный, зелёный, синий, каждая 00–FF.
  • Все три пары одинаковы — цвет серый. Восьмая пара в CSS — прозрачность.
  • Перевод в двоичную — по одной цифре в четыре бита, без арифметики.
  • Сигнатуры файлов: 25 50 44 46 — PDF, FF D8 FF — JPEG, 50 4B 03 04 — ZIP.

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

Почему в шестнадцатеричной системе используются буквы A–F?

Потому что арабских цифр не хватает. В системе с основанием 16 каждый разряд должен принимать шестнадцать разных значений — от нуля до пятнадцати. Цифры 0–9 покрывают только первые десять, а для значений 10, 11, 12, 13, 14 и 15 нужны однознаковые обозначения. Записать десятку как 10 внутри одного разряда нельзя: тогда стало бы невозможно отличить одно число из двух разрядов от одного разряда со значением десять, и вся позиционная запись развалилась бы. Поэтому недостающие шесть значений обозначили первыми буквами латинского алфавита подряд: A равно 10, B равно 11, C равно 12, D равно 13, E равно 14, F равно 15. Выбор именно латиницы объясняется практикой: эти символы есть на любой клавиатуре, входят в базовую таблицу ASCII, одинаково отображаются в любой кодировке и сохраняют естественный порядок сортировки. Регистр значения не имеет — ff и FF означают одно и то же число 255. Буквы в hex не являются текстом, это полноценные цифры своей системы счисления.

Что означает решётка перед кодом цвета вроде #FF5733?

Решётка — это пометка, которая говорит браузеру и графическому редактору, что дальше идёт цвет, записанный в шестнадцатеричном виде. Сама по себе она не является частью числа и на значение цвета не влияет: её роль такая же, как у префикса 0x в языках программирования. После решётки идут три пары знаков в формате RRGGBB — яркость красного, зелёного и синего каналов, каждая от 00 до FF, то есть от 0 до 255. В примере #FF5733 красный канал равен FF, это 255, максимум; зелёный равен 57, это 87; синий равен 33, это 51. В привычной записи получается rgb(255, 87, 51) — насыщенный оранжево-красный оттенок. Всего таких сочетаний 16 777 216, что соответствует 24-битной глубине цвета. Кроме шестизначной формы допустимы ещё две: сокращённая из трёх знаков, где каждый знак дублируется (#F53 разворачивается в #FF5533), и восьмизначная, где последняя пара задаёт прозрачность. Если все три пары одинаковы, цвет всегда получается серым.

Как перевести шестнадцатеричное число в десятичное вручную?

Действует то же правило, что и в обычной десятичной записи, только вес разряда растёт не в десять, а в шестнадцать раз. Самая правая цифра имеет вес 1, следующая слева — 16, дальше 256, затем 4096. Порядок действий такой: заменить буквы на их числовые значения по таблице (A равно 10, B равно 11, C равно 12, D равно 13, E равно 14, F равно 15), умножить каждую цифру на вес её разряда и сложить результаты. Пример на двух знаках: 2F — это 2 умножить на 16 плюс 15, итого 47. Пример на трёх знаках: 1A3 — это 1 умножить на 256, плюс 10 умножить на 16, плюс 3, итого 419. Часто встречающееся FF даёт 15 умножить на 16 плюс 15, то есть 255 — максимальное значение одного байта. Для быстрой прикидки полезно помнить опорные точки: 0x10 равно 16, 0x100 равно 256, 0x1000 равно 4096. Систематические способы пересчёта между всеми системами счисления, включая деление в столбик для обратного перевода, разобраны в обзорной статье о системах счисления.

Почему один байт записывается ровно двумя шестнадцатеричными цифрами?

Причина в том, что 16 — это 2 в четвёртой степени. Одна шестнадцатеричная цифра принимает шестнадцать значений, и ровно столько же комбинаций дают четыре бита: от 0000 до 1111. Значит, одна цифра hex соответствует четырём битам, такую группу называют нибблом или полубайтом. Байт состоит из восьми бит, то есть из двух нибблов, и потому записывается двумя знаками. Диапазон байта 0–255 в шестнадцатеричной форме выглядит как 00–FF. Практическая польза этого соответствия огромна: перевод между двоичной и шестнадцатеричной записью делается механически, без вычислений. Двоичное 11010110 достаточно разрезать пополам на 1101 и 0110, посмотреть в таблицу и получить D6. Обратный перевод так же прост. Для сравнения, восьмеричная система соответствует трём битам, а восемь на три нацело не делится, поэтому байт в ней распадается некрасиво — из-за этого hex и вытеснил восьмеричную запись почти отовсюду. Именно поэтому дампы файлов, ключи, хеши и адреса памяти показывают в шестнадцатеричном виде.

Где ещё применяется шестнадцатеричная система кроме цветов?

Список довольно широкий. Адреса памяти и указатели в отладчиках всегда показываются в hex — например, 0x00007FFE1A2B3C40; удобство в том, что границы блоков выглядят круглыми: страница памяти в 4 килобайта — это 0x1000. Коды ошибок операционных систем вида 0x80070005 — это упакованные в 32 бита значения, где отдельные группы битов кодируют тип и источник ошибки. MAC-адрес сетевого устройства — 6 байт, то есть 12 шестнадцатеричных знаков, записанных парами через двоеточие. Адреса IPv6 состоят из восьми групп по четыре hex-знака. Хеши и контрольные суммы публикуются в hex: CRC32 занимает 8 знаков, MD5 — 32, SHA-256 — 64. В URL символы, недопустимые в адресе, заменяются процентным кодированием: пробел превращается в %20. В HTML символ можно вставить по его шестнадцатеричному номеру. В кодах маркировки DataMatrix группы данных разделяет служебный символ с кодом 0x1D. Прошивки микроконтроллеров распространяются в текстовом формате Intel HEX. Идентификаторы бесконтактных карт и RFID-меток тоже выводятся шестнадцатеричными строками.

Как отличить шестнадцатеричное число от десятичного, если нет пометки?

Надёжнее всего смотреть на пометку, потому что запись 10 сама по себе неоднозначна: в десятичной системе это десять, в шестнадцатеричной — шестнадцать. Обозначений исторически накопилось несколько. Префикс 0x применяется в C, C++, Java, Python, JavaScript и в кодах ошибок Windows. Решётка ставится перед цветами в CSS, HTML и графических редакторах. Суффикс h характерен для ассемблера x86, знак доллара — для Pascal, Delphi и ассемблера Motorola. Внутри строк используют экранирование через обратный слэш и x, в URL — знак процента, в Unicode — префикс U+. Если пометки нет вовсе, помогают два признака. Первый: наличие хотя бы одной буквы от A до F почти наверняка означает hex, потому что в десятичной записи буквы невозможны. Второй: контекст поля. Шесть знаков в настройке цвета, длинная строка рядом со ссылкой на скачивание, идентификатор устройства, адрес в отладчике — всё это шестнадцатеричные значения по умолчанию. Обратная ситуация опаснее: число без букв, например 0x120, тоже может быть hex и равняться 288, поэтому пометку игнорировать нельзя.