Глубокое понимание бинарных файлов

Я изучаю C++ специально для работы с бинарной файловой структурой и, поскольку я совершенно не знаком с бинарными файлами, битами, битами и шестнадцатеричными числами, я решил сделать один шаг назад и создать прочную понимания по предметам.

На картинке, которую я включил ниже, я написал два слова (blue thief) в файле .txt.

введите здесь описание изображения

Причина этого в том, что когда я декодирую файл с помощью шестнадцатеричного редактора, я хотел понять, как на самом деле информация хранится в шестнадцатеричном формате. Теперь, не поймите меня неправильно, я не пытаюсь зарабатывать на жизнь чтением шестнадцатеричных форматов весь день, а только для того, чтобы иметь минимальный уровень понимания основ композиции двоичного файла. Я также знаю, что все файлы имеют разную структуру, но просто для понимания я хотел знать, как именно слова «синий вор» и один ' ' (пробел) были преобразованы в эти символы.

Еще одна вещь, я слышал, что бинарные файлы содержат три типа информации:

header, ftm и data! это касается только мультимедийных файлов, таких как аудио, видео? потому что я не вижу ничего, кроме того, что выглядит как фрагмент data только в этом файле.


person blue thief    schedule 17.06.2013    source источник
comment
Какой вопрос? Вы уловили различие между текстовыми и двоичными файлами. Текстовый файл, подобный вашему примеру, содержит только те символы, которые вы видите в Блокноте, — ни больше, ни меньше. Бинарный файл в системах Windows — это все, что не является текстовым файлом. (В Unix различие становится более нечетким...) Он не должен содержать заголовок, определяющий, в каком формате закодированы данные, но большинство из них. Заголовок может сильно различаться по размеру и структуре.   -  person dodgethesteamroller    schedule 18.06.2013
comment
@dodgethesteamroller Я просто хотел знать, как были преобразованы буквы, чтобы я мог понять, как работает и возможно преобразование текста в шестнадцатеричный код, а также если есть что-то еще, что нужно знать в блокноте.   -  person blue thief    schedule 18.06.2013
comment
Хорошо, я вижу. :) Расширение моего комментария до ответа...   -  person dodgethesteamroller    schedule 18.06.2013
comment
@dodgethesteamroller, это больше похоже на это. Пока вы в этом. отозвать дв наверное :) ?   -  person blue thief    schedule 18.06.2013
comment
Извините, я не тот человек, который поставил вам минус, но я могу отменить его до 0...   -  person dodgethesteamroller    schedule 18.06.2013


Ответы (1)


Символы в вашем текстовом файле закодированы в расширении Windows для ASCII — один байт для каждого символа, который вы видите в Блокноте. Что вы видите, то и получаете.

Как правило, в системах Windows проводится четкое различие между текстовыми и двоичными файлами. В системах Unix/Linux разница более нечеткая... вы можете возразить, что на самом деле разницы нет.

В системах Windows различие обеспечивается расширениями файлов. Предполагается, что все файлы с расширением «.TXT» являются текстовыми файлами (т. е. содержат только шестнадцатеричные коды, представляющие видимые на экране символы, где «видимый» включает пробелы).

Бинарные файлы — это совсем другой котел. Большинство, как вы упомянули, включают какой-то заголовок, описывающий, как кодируются следующие данные. Эти заголовки могут сильно различаться по размеру в зависимости от типа данных (опять же, предполагается, что они указываются расширением в системах Windows, а также в Unix). Простым примером является формат WAV для несжатого аудио. Если вы откроете WAV-файл в своей программе редактирования шестнадцатеричного кода, вы увидите, что первые четыре байта — это «RIFF» — это маркер, который часто называют «магическим числом», хотя он читается как текст, указывающий, что содержимое представляет собой аудиофайл. Более новые версии спецификации WAV несколько усложнили это, но первоначально заголовок WAV состоял из тега «RIFF» плюс около дюжины байтов, указывающих частоту дискретизации следующих данных. (Вы можете убедиться в этом, сравнив необработанные данные в дорожке на аудио компакт-диске с файлом WAV, созданным путем копирования несжатой копии этой дорожки на частоте 44,1 кГц — данные должны быть такими же, только с разделом заголовка, добавленным в конце. начало файла WAV.)

Исполняемые файлы (скомпилированные программы) представляют собой особый тип двоичных файлов, но они следуют примерно той же схеме заголовка, за которым следуют данные в установленном формате. Однако в этом случае «данные» представляют собой исполняемый машинный код, а заголовок указывает, помимо прочего, на какую операционную систему работает файл. (Например, большинство исполняемых файлов Linux начинаются с символов "ELF".)

person dodgethesteamroller    schedule 17.06.2013
comment
Впечатляющий. Вы как раз более-менее описали то, что я хотел узнать. И все же последний вопрос. Как я могу узнать больше об этом? Какую ссылку вы могли бы порекомендовать, которая могла бы помочь мне понять это? - person blue thief; 18.06.2013
comment
@bluethief Зависит от того, в каком направлении вы хотите двигаться. Чтобы узнать больше о расширениях файлов и различных способах кодирования данных, этот список форматов файлов в Википедии выглядит так: хорошее начало. Чтобы узнать больше о кодировках символов в текстовых файлах, сначала перейдите по приведенной выше ссылке для ASCII, а затем прочитайте Unicode. Если вас интересует, как эти представления работают на аппаратном уровне, вы можете прочитать о binary и диски. - person dodgethesteamroller; 18.06.2013