@CVadymT

Почему большинство файлов содержат шестнадцатеричный код?

Всем привет! У меня давно появился вопрос, возможно он глупый но всё же:
Почему большинство файлов содержат что-то наподобие этого:

4944 3303 0000 0000 0265 574f 4153 0000
002b 0000 6874 7470 3a2f 2f7a 6179 6365
762e 6e65 742f 7061 6765 732f 3433 3731
352f 3433 3731 3531 302e 7368 746d 6c54
4954 3200 0000 1000 0000 4f47 2028 7a61

Почему не просто текст, числа и так далее?

Заранее спасибо!
  • Вопрос задан
  • 365 просмотров
Пригласить эксперта
Ответы на вопрос 10
@leremin
atypical programmer
На самом деле этот "шестнадцатиричный" код занимает меньше места. Например, первое 4944 - это два байта (49 и 44), а текстом - это минимум 4 байта (зависит от кодировки). А вообще все это настолько очевидно, что даже не знаю, как ответить. Не обижайтесь. И вообще шестнадцатиричный простомтр - это просто относительно удобная традиция. Можно и в блокноте открыть, и в бинарном коде - в обоих случаях будет еще больше ада.

А что касается непосредственно вопроса: все файлы хранят байты. Деление на текстовые и бинарные данные чисто условное. Шестнадцатиричные код они не хранят, тогда уж бинарный. Просто для просмотра и редактирования нетекстовых файлов используют такое представление. Ну это если нет специализированных редакторов, известна структура файла и у вас куча свободного времени.
Ответ написан
Griboks
@Griboks
В большинстве файлов содержится двоичный код - универсальная форма представления любой информации. Просто ваш текстовый редактор показывает эти биты в шестнадцатеричном формате hex.
Ответ написан
Расслабся это всего лишь иллюзия созданная компьютером.
На самом деле файлов не существует.
А есть только электроны, которые двигаются внутри компьютера.
<:o)
Ответ написан
Therapyx
@Therapyx
Data Science
А как ты думаешь как хранится информация и как она считывается? в палочках, закарючках и черточках?
1 Hex это репрезентация 4 битов - 0000. 2 Hex'a - 0000 0000 умещает в себе уже 256 состояний, которые охарактеризовывают все ASCII таблицу.
А насчет и так далее. Это одна из основных тем, о которой надо читать. если интересно, первое что нашел на скорую руку лучше поинтерисуйся, о хороших статьях или книгах
Ответ написан
@evgeniy_lm
Я тебя удивлю, но ВСЕ файлы содержат не шестнадцатиричный код, а набор байт. Как известно байт это некая величина измерения информации которая может принимать числовое значение от 0 до 255. Так же известно, что число это количественная характеристика. Для записи чисел существуют различные системы счисления, например, число "двадцать" можно записать как 10100(2), 20(10), 24(8), 14(16), 10(20) или ХХ в римской записи.
Компьютеру пофигу, для тебя он может отображать байты как числа как угодно, но сам при этом хранит их в двоичной форме (такая у него конструкция). Отображать байты в двоичном виде не очень удобно, а любая другая система кроме шестнадцатиричной затрудняет перевод из двоичной и наоборот.
Ответ написан
CityCat4
@CityCat4
Жил да был CityCat за углом...
Потому что все мы В МАТРИЦЕ! :D

:ROFL:
Ответ написан
twobomb
@twobomb
Если любишь программирование попробуй познакомиться с Assembler,,подизассемблировать свои программы и возможно эти цифры будут значить для тебя нечто большее. Ты увидишь в них команды, данные...
Ответ написан
Почему не просто текст, числа и так далее?

Ну просто большинству людей гораздо удобнее читать в шестнадцатеричном виде, нежели в двоичном.
А текста я там не вижу, да и откуда он возьмется в файле? Там могут быть только числа.
Ответ написан
@Mercury13
Программист на «си с крестами» и не только
Так исторически сложилось, что единица памяти и ввода-вывода — байт, который равняется восьми битам. Байт, как известно, кодирует цифры 0…255 — хватает, чтобы закодировать английский алфавит, национальный алфавит (например, русский или грузинский) и ещё кучу символов.

Вот программист смотрит на простыню байтов. Что нужно ему делать?
1. Преобразовывать единичный байт в число.
2. Преобразовывать много байтов в число, как в уме, так и механизированно.
3. Выделять из байта отдельные биты.
4. Преобразовывать единичный байт в символ.
5. Преобразовывать несколько байтов в многобайтовый символ.

Задача 5 решается, если есть 4 и 2 (к тому же, когда появлялись байтовые дампы, она вообще не стояла, Юникод появился ≈1990).
Задача 4 решается, если все байты вывести в виде символов, с одним маленьким изменением: каждому символу, даже управляющему, придумать графический вид. Символ №0 не имеет традиционного вида, но часто ему придумывают что-то типа точки, №1 и 2 — смайлики, №3…6 — карточные масти…
Задача 3 слишком редка, чтобы оптимизировать дамп именно под неё, к тому же двоичный код громоздок. Однако вместо двоичного кода можно применить восьмеричный или шестнадцатеричный, программист быстро научится выделять из восьмеричных/шестнадцатеричных цифр биты.
Для задачи 1 лучше всего писать просто цифры 0…255.
Для задачи 2 катит любая система счисления.

Таким образом, у нас остались два варианта.
• Каждый байт писать в десятичной системе 000…255.
• Каждый байт писать в шестнадцатеричной системе 00…FF (как раз получается две цифры).
По опыту, задача 1 для чисел больше 15 крайне редка. Зато для задач 2 и 3 шестнадцатеричный вид намного удобнее десятичного.
Вот так и сложился традиционный вид дампа файлов. Слева — шестнадцатеричный вид, справа — символы однобайтовой кодировки.
Ответ написан
@vaajnur
веб-программист
потому как винда не открывает исходники
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы
20 авг. 2018, в 21:21
30000 руб./за проект
20 авг. 2018, в 20:46
5000 руб./за проект
20 авг. 2018, в 20:38
700 руб./в час