Binary, Hex, and Data Units Explained
Практический глоссарий двоичных, шестнадцатеричных систем счисления и соглашений по единицам данных, используемых в программировании, сетевых технологиях и работе в области судебной информатики.
Каждый байт, который вы проверяете в hex-редакторе, каждую маску подсети, которую вы рассчитываете, каждый размер файла, который сообщает инструмент, определяют несколько систем счисления и соглашений по единицам. Ошибитесь здесь — и вы неправильно оцените размер буфера, неправильно прочитаете дамп памяти или поспорите с коллегой о том, что такое 1 KB: 1000 или 1024 байта.
Binary: базис, который реально использует каждый компьютер
Двоичная система — это система счисления с основанием 2, содержит только 0 и 1. Один двоичный разряд — это бит. Сгруппируйте 8 битов вместе, и вы получите байт, который может представлять 256 различных значений (0 через 255 без знака или -128 через 127 со знаком, два дополнения).
Когда вы видите 01001000, это 72 в десятичной системе, что является ASCII-кодом символа 'H'. Преобразование вручную — это просто суммирование степеней 2 от крайнего правого бита: 2^6 + 2^3 = 64 + 8 = 72. Инструменты вроде python3 -c "print(bin(72))" или xxd на файле сделают это мгновенно, но понимание математики важно, когда вы реверс-инжинируете битовую маску или вычисляете значения флагов в TCP-заголовке.
Hexadecimal: сокращение для двоичной системы
Hex — это система счисления с основанием 16, использует 0-9 и A-F. Она существует потому, что двоичная система на больших объёмах нечитаемая, а десятичная система не отображается чистым образом на границы байтов. Один шестнадцатеричный разряд представляет ровно 4 бита, поэтому два шестнадцатеричных разряда представляют один полный байт — 0x00 до 0xFF охватывает все 256 значений байта без пустых мест.
Вот почему hex-дампы — это стандарт в инструментах вроде xxd, hexdump -C или в виде памяти дизассемблера. Когда вы видите 0x4D 0x5A в начале файла, это заголовок MZ, идентифицирующий исполняемый файл Windows PE. Адреса памяти, коды цветов (#FF5733), MAC-адреса и IPv6-адреса по соглашению пишут в hex, потому что это отображается чистым образом на базовую структуру байтов и полубайтов.
Преобразование hex в десятичную: 0x4D = (4 × 16) + 13 = 77. В Python int('4D', 16) даст вам результат без ручных вычислений, а hex(77) — наоборот.
Где двоичная, десятичная и шестнадцатеричная системы реально встречаются на практике
IP-адреса — хороший пример столкновения всех трёх. IPv4-адрес типа 192.168.1.1 на самом деле четыре байта: 11000000.10101000.00000001.00000001 в двоичной системе или C0.A8.01.01 в hex. Математика подсетей — определение, находятся ли два адреса в одной сети — фундаментально это двоичные операции AND с маской подсети, хотя мы всё пишем в точечной десятичной нотации для удобства.
В цифровой криминалистике и анализе вредоноса вы постоянно переводите между этими представлениями. Дизассемблер показывает команды в hex, но CPU выполняет чистую двоичную систему, а значения регистров часто интерпретируются как десятичные смещения или ASCII-строки в зависимости от контекста. Знание того, что 0x41 — это одновременно число 65 и ASCII-символ 'A', это тот вид распознавания паттернов, который значительно ускоряет ручной анализ.
Data units: проблема 1000 или 1024
Вот здесь людей и ловят. Производители хранилищ, файловые системы и операционные системы не всегда согласны относительно того, что представляет собой
Написано с помощью ИИ, проверено и опубликовано Михалом Пильхом (CISSP), Korra Studio.
Это одна заметка из базы знаний Korra Studio — платформа сочетает каждую тему с наставничеством один на один.
Начать бесплатноarrow_forward