Как посмотреть двоичный код файла

Обновлено: 07.07.2024

Т екстовые файлы хранят данные в виде текста (sic!). Это значит, что если, например, мы записываем целое число 12345678 в файл, то записывается 8 символов, а это 8 байт данных, несмотря на то, что число помещается в целый тип. Кроме того, вывод и ввод данных является форматированным, то есть каждый раз, когда мы считываем число из файла или записываем в файл происходит трансформация числа в строку или обратно. Это затратные операции, которых можно избежать.

Текстовые файлы позволяют хранить информацию в виде, понятном для человека. Можно, однако, хранить данные непосредственно в бинарном виде. Для этих целей используются бинарные файлы.

Выполните программу и посмотрите содержимое файла output.bin. Число, которое ввёл пользователь записывается в файл непосредственно в бинарном виде. Можете открыть файл в любом редакторе, поддерживающем представление в шестнадцатеричном виде (Total Commander, Far) и убедиться в этом.

Запись в файл осуществляется с помощью функции

Функция возвращает число удачно записанных элементов. В качестве аргументов принимает указатель на массив, размер одного элемента, число элементов и указатель на файловый поток. Вместо массив, конечно, может быть передан любой объект.

Запись в бинарный файл объекта похожа на его отображение: берутся данные из оперативной памяти и пишутся как есть. Для считывания используется функция fread

Функция возвращает число удачно прочитанных элементов, которые помещаются по адресу ptr. Всего считывается count элементов по size байт. Давайте теперь считаем наше число обратно в переменную.

fseek

Одной из важных функций для работы с бинарными файлами является функция fseek

Эта функция устанавливает указатель позиции, ассоциированный с потоком, на новое положение. Индикатор позиции указывает, на каком месте в файле мы остановились. Когда мы открываем файл, позиция равна 0. Каждый раз, записывая байт данных, указатель позиции сдвигается на единицу вперёд.
fseek принимает в качестве аргументов указатель на поток и сдвиг в offset байт относительно origin. origin может принимать три значения

  • SEEK_SET - начало файла
  • SEEK_CUR - текущее положение файла
  • SEEK_END - конец файла. К сожалению, стандартом не определено, что такое конец файла, поэтому полагаться на эту функцию нельзя.

В случае удачной работы функция возвращает 0.

Дополним наш старый пример: запишем число, затем сдвинемся указатель на начало файла и прочитаем его.

Вместо этого можно также использовать функцию rewind, которая перемещает индикатор позиции в начало.

В си определён специальный тип fpos_t, который используется для хранения позиции индикатора позиции в файле.
Функция

используется для того, чтобы назначить переменной pos текущее положение. Функция

используется для перевода указателя в позицию, которая хранится в переменной pos. Обе функции в случае удачного завершения возвращают ноль.

возвращает текущее положение индикатора относительно начала файла. Для бинарных файлов - это число байт, для текстовых не определено (если текстовый файл состоит из однобайтовых символов, то также число байт).

Рассмотрим пример: пользователь вводит числа. Первые 4 байта файла: целое, которое обозначает, сколько чисел было введено. После того, как пользователь прекращает вводить числа, мы перемещаемся в начало файла и записываем туда число введённых элементов.

Вторая программа сначала считывает количество записанных чисел, а потом считывает и выводит числа по порядку.

Примеры

1. Имеется бинарный файл размером 10*sizeof(int) байт. Пользователь вводит номер ячейки, после чего в неё записывает число. После каждой операции выводятся все числа. Сначала пытаемся открыть файл в режиме чтения и записи. Если это не удаётся, то пробуем создать файл, если удаётся создать файл, то повторяем попытку открыть файл для чтения и записи.

2. Пишем слова в бинарный файл. Формат такой - сначало число букв, потом само слово без нулевого символа. Ели длина слова равна нулю, то больше слов нет. Сначала запрашиваем слова у пользователя, потом считываем обратно.

3. Задача - считать данные из текстового файла и записать их в бинарный. Для решения зачи создадим функцию обёртку. Она будет принимать имя файла, режим доступа, функцию, которую необходимо выполнить, если файл был удачно открыт и аргументы этой функции. Так как аргументов может быть много и они могут быть разного типа, то их можно передавать в качестве указателя на структуру. После выполнения функции файл закрывается. Таким образом, нет необходимости думать об освобождении ресурсов.

4. Функция saveInt32Array позволяет сохранить массив типа int32_t в файл. Обратная ей loadInt32Array считывает массив обратно. Функция loadInt32Array сначала инициализирует переданный ей массив, поэтому мы должны передавать указатель на указатель; кроме того, она записывает считанный размер массива в переданный параметр size, из-за чего он передаётся как указатель.

5. Создание таблицы поиска. Для ускорения работы программы вместо вычисления функции можно произвести сначала вычисление значений функции на интервале с определённой точностью, после чего брать значения уже из таблицы. Программа сначала производит табулирование функции с заданными параметрами и сохраняет его в файл, затем подгружает предвычисленный массив, который уже используется для определения значений. В этой программе все функции возвращают переменную типа Result, которая хранит номер ошибки. Если функция отработала без проблем, то она возвращает Ok (0).

6. У нас имеются две структуры. Первая PersonKey хранит логин, пароль, id пользователя и поле offset. Вторая структура PersonInfo хранит имя и фамилию пользователя и его возраст. Первые структуры записываются в бинарный файл keys.bin, вторые структуры в бинарный файл values.bin. Поле offset определяет положение соответствующей информации о пользователе во втором файле. Таким образом, получив PersonKey из первого файла, по полю offset можно извлечь из второго файла связанную с данным ключом информацию.

Зачем так делать? Это выгодно в том случае, если структура PersonInfo имеет большой размер. Извлекать массив маленьких структур из файла не накладно, а когда нам понадобится большая структура, её можно извлечь по уже известному адресу в файле.

email

Всё ещё не понятно? – пиши вопросы на ящик

Бинарный файл — это любой файл на вашем компьютере. Вся информация на компьютере и связанных с ним носителях записана в битах (отсюда и название). Однако, для сравнения, текстовый файл можно прочитать в соответствующих расширению ридерах (простейшие — даже в Блокноте), а исполняемый файл — нет. И хоть фактически txt-файл является тем же бинарным файлом, но когда говорят о проблеме открытия содержимого бинарных файлов, имеют ввиду исполняемые файлы, а также сжатые данные.

Как прочитать бинарный файл

  • Как прочитать бинарный файл
  • Как открыть bin файл
  • Как расшифровать bin

Загрузите на винчестер прогамму Hex Edit — редактор файлов, представляющий их содержимое в двоичном виде. Откройте программу, дважды кликнув мышью по стартовому файлу. Данное программное обеспечение позволяет в режиме реального времени читать бинарные файлы, изменять содержимое, добавлять свои собственные записи и многое другое. Чтобы полноценно работать в данной среде, вам нужно немного знать об общих понятиях бинарных файлов.

Внесите изменения в содержимое файла. Приложение может показать важные части файла для более удобного поиска, а также имеет гибкую настройку графического отображения двоичного кода. Переключите вид содержимого в режим ASCII+IBM/OEM, чтобы увидеть программный код файла. Если вы внесете неправильные строки в файл, он может работать некорректно, вызвав при этом серьезные последствия у операционной системы персонального компьютера.

Сохраните изменения. Если у вас нет опыта в таком редактировании файлов, будьте готовы к тому, что файл не откроется и откажется работать после внесения изменений. Вы, скорее всего, испортите несколько копий, прежде чем добьетесь результата. Старайтесь не сохранять все изменения в исходный файл, чтобы его содержимое оставалось неизменным.

у меня есть файл, немного больше, чем 500 МБ, что вызывает некоторые проблемы.

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

Как я могу просмотреть "двоичный" файл, используя что-то встроенный в Windows 7? Я предпочел бы избежать необходимости загружать что-либо дополнительное.

(1) мой коллега и я открыл файл в текст редакторы, и они показывают, как можно было бы ожидать. Но оба текстовых редактора будут открывать файлы с различными соглашениями EOL и интерпретировать их автоматически. (TextEdit и Emacs 24.2. Для Emacs я создал второй файл только с первыми 4K байтами, используя head -c4096 на Linux и открыл коробку из моего окна.

Я попытался использовать hexl-mode в Emacs, но когда я перешел в hexl-mode и вернулся в текстовый режим, содержимое буфера изменилось, добавив видимое ^M в конец каждую строчку, так что я не доверяю этому в данный момент.

Я считаю, что проблема может быть в конец строки символ(ы). Редакторы мой коллега и я попробовали (1) просто автоматически распознали соглашение о конце строки и показали нам линии. И, основываясь на других доказательствах, я считаю, что Конвенция EOL-это только возврат перевозки. (2) возврат только.

чтобы узнать, что на самом деле находится в файле, я хотел бы посмотреть двоичное содержимое файла или, по крайней мере, пару тысяч байт файл, preferablely в hex, хотя я мог бы работать с десятичной или восьмеричной. Только в нулях будет очень тяжело смотреть.

обновление

кроме одного, предполагающего DEBUG , все ответы ниже в той или иной степени. Я проголосовал за каждого из них как полезного. Мой вопрос был плохо сформулирован. При тестировании каждого предложенного решения я обнаружил, что я действительно хотел бок о бок hex и просмотр текстового содержимого, и что я хотел, чтобы это было что-то, где когда я наведу курсор на что-то, либо на байтовое значение, либо на текстовый символ, соответствующая вещь с другой стороны будет выделена.

Посмотрите на двоичный код любого файла - насколько это сложно? Инструменты для просмотра байт-кода HEX с разработкой на C

Назначение-разработка инструментов для просмотра байт-кода HEX в C

Под окнами, чтобы увидеть содержимое текстового файла, вы можете использовать «Блокнот», используйте type file.txt Вы также можете отобразить содержимое файла в командном окне. Но -

Если вы хотите посмотреть внутренний байт-код двоичного файла, какой инструмент вы используете?


Вы бы сказали, что есть много инструментов тоже! Например HexViewer Baidu проверить много! Существует также знаменитый UltraEdit напрямую с режимом редактирования HEX.В Notepad ++ также можно скачать плагин HEX Editor. Например, открыть один с UltraEdit 123.rar Файл показан ниже.


Откройте его с помощью Notepad ++, дисплей будет выглядеть следующим образом:

Отображаются видимые значения символов HEX. Справка справа показывает буквы со значениями ASCII, но две программы по-разному обрабатывают китайский режим, поэтому одинаково отображаются только буквы, которые можно использовать только как справочные.
Мы можем вздыхать, так удобно иметь это программное обеспечение!
Итак, как мы можем кодировать один без этих инструментов? Возможно, вы не осмелитесь представить, сколько процедур это займет! Даже если отображается только шестнадцатеричный код байта HEX, страницу можно перевернуть вверх и вниз, а также просмотреть значение в любой позиции (строке) и т. Д., Много ли кода?

Сначала посмотрите на необходимые функции

Имя инструмента: bin2hex.exe Это программа командной строки.

(1) Справочная информация

Если я не могу его использовать, должно быть отображено справочное описание программы. Введите непосредственно в командном окне bin2hex :

Видимая программа показывает функции и инструкции. Предложите ввести имя файла, который вы хотите просмотреть. Так что приходите еще

(2) Ошибка подсказки

Что делать, если введенный файл не существует? Хотите получить запрос?

abc.ttt не существует и не существует, поэтому выдается приглашение file abc.ttt not found 。

(3) Интерактивная командная строка

Установите файл 123.rar на диск, введите
bin2hex.exe 123.rar Дисплей входит в среду просмотра HEX и запрашивает командную строку операции:

По сравнению с программным обеспечением, результаты точно такие же.

Снимок экрана командного окна выглядит следующим образом:


Это также дает командную строку операции: выход с q. Используйте стрелку u или вверх, чтобы перевернуть страницу, используйте стрелку d или вниз, чтобы перейти на следующую страницу, каждая страница отображает 16 строк, каждая строка имеет 16 байтов, всего 16 * 16 = 256 байтов информации. Используйте e для прокрутки до конца файла и используйте s для возврата к началу файла (это может быть удобнее, чем Notepad ++ или UtraEdit).

(4) Простой и красивый пользовательский интерфейс

Для эстетики экран также может быть обработан как черный текст на белом фоне.

(5) Команды взаимодействия с пользователем


Если файл длинный, не будет ли громоздким переворачиваться взад и вперед, чтобы его можно было просматривать где угодно? Итак, нажмите команду g, а затем введите местоположение, которое вы хотите увидеть, и обернитесь:
После ввода g, как показано, появится запрос address(HEX)? Example:0x1024 >0x , А затем вы можете ввести адрес, например, 2000, то есть вид из местоположения 0x2000:



Видимый адрес начинается с 0x2000.

Видно, что программное обеспечение использует командный интерактивный режим, и имеется 7 команд, запрашивающих ввод.

Несмотря на то, что команда проста, форма такая же, как стиль окна приглашения Python, Matlab, gnuplot и т. Д., И изначально она имеет простую интерактивную форму программного обеспечения.

(6) Тихий режим

Программное обеспечение будет запрашивать командную операцию после каждого взаимодействия, это для удобства первого пользователя. Но если это будет напоминать вам, это будет раздражать? UNIX и Linux поддерживают молчание, поэтому мы также реализовали тихий режим в качестве демонстрации. Введите n и войдите в тихий режим.

Как показано на рисунке:

В тихом режиме используйте те же команды для перехода на страницу (u, d), навигации (g), выхода из тихого режима с помощью ESC и входа в обычный режим.

(7) Выход


  • Клавиша ESC возвращается в нормальный режим.
  • В любом режиме используйте q для выхода из программного обеспечения.
    После ввода q вы возвращаетесь в командное окно.

Сколько кода?

Ты не думаешь? Для такой программы я использовал только 113 строк кода на Си. Конечно, это не оптимально. Бросай кирпичи.

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

Остальное - цикл и операторы ввода и вывода. Но структура программы - самый классический метод программ командной строки.

Читайте также: