Перейти к содержимому

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

  • автор:

Как открыть и записать из бинарного файла массив?

вот я имею задание: Для двух файлов А та В, которые включают в себя по 17 элементов: A = , B = , i =1,17 необходимо выполнить следующие действия с элементами аi и bi : сi= (ai/bi)- и записать полученные значения ci в файл c = . Я написал код для текстового файла, но не знаю как писать для бинарного, есть ли большие различия при записи и чтении бинарного файла и можно ли обойтись без массива и записать последовательность чисел в файл без него?

#define _CRT_SECURE_NO_WARNINGS #include #include #include #include using namespace std; int main() < SetConsoleCP(1251); SetConsoleOutputCP(1251); int a[17] = <>; int b[17] = <>; int c[17] = <>; fstream f; fstream f2; fstream f3; f.open("LR3(1).txt", fstream::in | fstream::out); f2.open("LR3(2).txt", fstream::in | fstream::out); f3.open("LR3(3).txt", fstream::in | fstream::out); if (!f) < cout else < cout if (!f2) < cout else < cout if (!f3) < cout else < cout for (int i = 0; i < 17; i++) < a[i] = rand() % 100 + 1; f f > a[i]; cout cout > b[i]; cout cout > c[i]; cout cout

Отслеживать
задан 28 дек 2020 в 18:50
Даниил Ищенко Даниил Ищенко
13 5 5 бронзовых знаков
Можно и без массива, только зачем? элементов меньше 10к значит проще сразу всё считать.
28 дек 2020 в 19:19
Это для себя, пробую что-то новое
28 дек 2020 в 20:34

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Для работы с бинарными файлами, нужно сначала установить режим binary у потоков fstream

fstream f; fstream f2; fstream f3; f.open("LR3(1).bin", fstream::in | fstream::out | fstream::binary); f2.open("LR3(2).bin", fstream::in | fstream::out | fstream::binary); f3.open("LR3(3).bin", fstream::in | fstream::out | fstream::binary); 

А далее пример вашего кода без использования массива, с комментариями:

//Генерируем переменной случайное значение //после чего записываем его в бинарный файл int a, b, c; for (int i = 0; i < 17; i++) < a = rand() % 100 + 1; //Конвертируем переменную в массив байтов грубо говоря //и записываем sizeof(int) байт в файл f.write((char*)&a, sizeof(int)); b = rand() % 100 + 1; f2.write((char*)&b, sizeof(int)); c = (a / b) - 2; f3.write((char*)&c, sizeof(int)); >//Устанавливаем указатели get в файлах на начало файлов f.seekg(0); f2.seekg(0); f3.seekg(0); //Считываем по тому же принципе, как и записываем cout cout cout cout  

Как вы видите, для работы с бинарными файлами используются две функции write и read , которые принимают первым параметром буффер откуда будет браться информация или куда будут она будет записываться, а вторым параметром функции принимаю размер считываемой или записываемой информации.

Так же есть функции seekg и seekp они перемещают указатели get pointer или put pointer на число байт offset от установленного origin . В вашем случае используется seekg чтобы установить указатель для чтения, на начало файла.

Поподробней про работу с бинарными файлами можете почитать тут, поподробней об seekp и seekg тут

Открыть файл как двоичный код

Всем привет! Я пишу программу, которая осуществляет шифрование файлов и текста с помощью логических операций. А именно - XOR, OR и AND. Как известно, каждая из них имеет два аргумента, а на выход подается одно значение. Для этого при шифровании текста определяются двоичные коды символов, и эту часть программы я уже сделал. Но как открыть файл в виде последовательности нулей и единиц? Заранее всем благодарен. P. S. Язык программирования - С++, использую Qt.

Отслеживать
задан 8 янв 2018 в 17:01
Даниил Чижевский Даниил Чижевский
2,307 3 3 золотых знака 14 14 серебряных знаков 39 39 бронзовых знаков
Смотрите на QDataStream
8 янв 2018 в 17:07

Работайте с битами вручную. Вычленяете AND-ом младший бит, затем сдвигаете всё число на один бит вправо. Повторяете это в цикле с количеством итераций, равным количеству бит в числе. Обработали очередное число — считываете из файла следующее. Примечание: число может быть любым беззнаковым: uint8_t , uint16_t , uint32_t .

8 янв 2018 в 17:28

Ответ на вопрос зависит от того, в каком виде вам нужны двоичные данные, то есть в каком виде вам удобнее работать с ними в той части кода, где вы выполняете шифрование. Самый простой способ - QFile::readAll - вернет вам QByteArray с двоичными данными, дальше можно его шифровать как нужно.

Двоичный редактор (C++)

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

Двоичный редактор позволяет изменять любой ресурс на двоичном уровне в шестнадцатеричном или в формате ASCII. Для поиска строк ASCII или шестнадцатеричных байтов можно также использовать команду "Найти" . Используйте двоичный редактор , только если необходимо просмотреть или внести незначительные изменения в пользовательские ресурсы или типы ресурсов, которые не поддерживаются средой Visual Studio. Двоичный редактор недоступен в выпусках Express.

  • Чтобы открыть двоичный редактор в новом файле, перейдите в меню "Новый >>файл", выберите тип файла, который нужно изменить, а затем щелкните стрелку раскрывающегося списка рядом с кнопкой "Открыть" и нажмите кнопку "Открыть с двоичным редактором".> Раскрывающийся список в диалоговом окне создания файла недоступен в Visual Studio 2019, но доступен в Visual Studio 2022.
  • Чтобы открыть двоичный редактор в существующем файле, перейдите в меню >"Открыть файл", выберите нужный файл, а затем щелкните стрелку раскрывающегося списка рядом с кнопкой "Открыть>" и нажмите кнопку "Открыть с>двоичным редактором".

Двоичный редактор открыт в файле Scribble.rc. mydata.rc. Файл разделен на три раздела. В левом разделе показан адрес с начала файла. В среднем разделе показаны столбцы шестнадцатеричных значений из файла. В правом разделе показаны символы ASCII, соответствующие шестнадцатеричным значениям.

В двоичном редакторе представлены только определенные значения ASCII (0x20 через 0x7E). Расширенные символы отображаются в виде периодов в правой области значений ASCII в редакторе двоичных файлов. Печатные символы — это значения ASCII от 32 до 126.

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

Инструкции

В двоичном редакторе вы можете:

Открытие ресурса классического приложения Windows для редактирования в двоичном редакторе

  1. В окне представления ресурсоввыберите файл ресурсов, который необходимо изменить.
  2. Щелкните ресурс правой кнопкой мыши и выберите "Открыть двоичные данные".

Если вы используете окно представления ресурсов для открытия ресурса с форматом, который Visual Studio не распознает, например RCDATA или пользовательский ресурс, ресурс автоматически открывается в двоичном редакторе .

Открытие управляемого ресурса для редактирования в двоичном редакторе

  1. В Обозреватель решений выберите конкретный файл ресурсов, который требуется изменить.
  2. Щелкните правой кнопкой мыши ресурс и выберите "Открыть с помощью".
  3. В диалоговом окне Открыть с помощью выберите Двоичный редактор.

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

Изменение ресурса

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

  1. Выберите байт, который вы хотите изменить. Клавиша TAB перемещает фокус между шестнадцатеричными и ASCII разделами двоичного редактора . Вы можете использовать клавиши "Вверх по странице" и "Вниз ", чтобы перемещаться по ресурсу на один экран одновременно.
  2. Введите новое значение. Значение сразу же изменяется как в шестнадцатеричных, так и в разделах ASCII, а фокус перемещается на следующее значение в строке.

Двоичный редактор принимает изменения автоматически при закрытии редактора.

Поиск двоичных данных

Вы можете искать строки ASCII или шестнадцатеричные байты. Например, чтобы найти Hello, можно найти строку Hello или его шестнадцатеричное значение, 48 65 6C 6C 6C 6F.

  1. Перейдите в меню "Изменить >поиск".
  2. В поле "Найти что" выберите предыдущую строку поиска в раскрывающемся списке или введите нужные данные.
  3. Выберите любой из параметров поиска и нажмите кнопку "Найти далее".

Создание настраиваемого ресурса или ресурса данных

Вы можете создать новый пользовательский или ресурс данных, поместив ресурс в отдельный файл с помощью обычного синтаксиса файла скрипта ресурсов (RC), а затем включив этот файл, щелкнув проект правой кнопкой мыши в Обозреватель решений и выбрав "Включить ресурс".

  1. Создайте RC-файл , который содержит настраиваемый ресурс или ресурс данных. Пользовательские данные в .rc файле можно вводить в виде строк, завершаемых значением NULL, или целыми числами в десятичном, шестнадцатеричном или восьмеричном формате.
  2. В Обозреватель решений щелкните правой кнопкой мыши RC-файл проекта и выберите "Ресурс включает".
  3. В поле "Директивы времени компиляции" введите #include инструкцию, которая дает имя файла, содержащего настраиваемый ресурс, например:

#include mydata.rc 

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

Для создания пользовательских ресурсов или ресурсов данных требуется Win32.

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

Нравится ресурс?

ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi

Пожалуйста, выделяйте текст программы тегом [сode=pas] . [/сode] . Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля. Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как прочитать список файлов, поддиректорий в директории?
5. Как запустить программу/файл?
. (продолжение следует) .
Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.

Внимание
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца.

Модераторы: jack128, D[u]fa, Shaggy, Rouse_

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *