Зачем нужны шеснадцетиричная репрезентация бинарных данных и почему она удобнее

По началу я не понимал зачем нужны все эти битики байтики hex репрезентации, и как ими можно пользоваться. Но теперь я немного в них въехал и хочу вам рассказать.

Как все знают все данные в компьютерах хранятся в битах. Биты это малейшая единица данных, они имеют 2 состояния - 0 и 1. То есть True и False. Если объединить 8 бит, то получится байт. Так как я никогда не прикасался своими нежными высокоуровневыми ручками к бинарным данным, например протоколам или системным файлам итд. Но я решил копнуть немного и все-таки понять почему всетаки используют hex и вообще зачем он нужен.

Причина оказалась проста - если вы попробуете прочитать бинарный файл через редактор вроде xdd в режиме двоичного кода, xxd -b /bin/ls то будет сложно отделить байты друг от друга. Мы как люди не можем сразу визуально понимать например разницу между соседними байтами так-как они для нас сливаются в поток нулей и единиц.

Поэтому требуется использовать какую то более человечную репрезентацию потока байтов - hex. 1 hex цифра имеет 16 состояний. От 0 до 9 и от A до F. 

Если 1 hex имеет 16 состояний, то сколько состояний имеет 1 байт?? Чтобы понять это, нужно прибегнуть к комбинаторике, мне очень помогла понять этот принцип книга "Виленкин П.А. Комбинаторика". Как я и сказал выше 1 байт имеет 8 бит по 2 состояния. Таким образом, чтобы посчитать кол-во состояний 1 байта, нам нужно всего лишь возвести в степень кол-во состояний на бит: 2^8. Получится 256. И дело в том что это кол-во состояний идеально сходится с кол-вом состояний 2 шеснадцетиричных цифр, то есть 16^2 = 256. Таким образом 1 байт представляется 2 HEX символами, что очень удобно для чтения бинарных данным человеком. Таким образом непонятный для человека набор нулей и единиц превращается вполне себе понятный набор букв и десятичных цифр.

Теперь давайте вернемся к xxd и попробуем открыть бинарный файл, но уже в hex режиме xxd /bin/ls.

Таким образом я пришел к выводу почему во многих местах где работают с бинарными данными прибегают к использованию hex репрезентации двоичных данных.

Комментарии

Популярные сообщения из этого блога

DOS атака при помощи Python

Ведем телеграм канал через питон

Django migrations не видит изменения моделей