Не может записать двоичный файл

У меня есть следующая часть кода в C++.

int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
ofstream output("Sample.txt", ios::out | ios::binary);

for(int i = 0; i < 10; i++)
{
  output<<arr[i];
}

Теперь Sample.txt похож на это:

12345678910

"РАЗВЕ" "Sample.txt", как предполагается, не находится в двоичном файле? Почему это не преобразовывает все в двоичный файл, когда я открыл поток в режиме двоичного счета. Что я должен сделать, упаковать, я нуждаюсь в двоичном файле каждого элемента в массиве и затем печатаю его в файл.

5
задан sbi 11 March 2010 в 22:00
поделиться

4 ответа

Разве "Sample.txt" не должен быть двоичным?

Нет. Что делает std :: ios :: binary , так это предотвращение таких вещей, как перевод '\ n' из / в зависящий от платформы EOL. Он не пропустит перевод между внутренним представлением байтов данных и их строковым переводом. В конце концов, это и есть стримы. (Также подумайте о том, как вы будете передавать объект пользовательского типа, содержащий указатели в двоичном представлении.)

Для фактической записи двоичных объектов используйте std :: ostream :: write () . Однако будьте осторожны, результат зависит от платформы.

3
ответ дан 15 December 2019 в 06:23
поделиться

Двоичный формат означает, что символы новой строки не преобразуются в / из формата, специфичного для ОС. Вывод значения типа int с ofstream отформатирует его как десятичное число (обычный текст ASCII).

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

0
ответ дан 15 December 2019 в 06:23
поделиться

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

См. :

Файловые потоки, открытые в двоичном режиме , выполняют операции ввода и вывода независимо от любого формата . Небинарные файлы известны как текстовые файлы, и некоторые переводы могут происходить из-за форматирования некоторых специальных символов (например, новой строки и возврата каретки {{ 1}} символов).

Он не будет переведен в формат 0 и 1 . Все на компьютере использует двоичный формат , но когда вы открываете файл и читаете его с помощью редактора, редактор считывает двоичные данные и отображает символы ASCII для вас.

0
ответ дан 15 December 2019 в 06:23
поделиться

Двоичный режим в основном означает, что (например) не будет преобразования между символом новой строки, который вы программируете, и тем, что ваша платформа думает, что это конец строки (например, «\r\n» в Windows, «\r» на Ma).

Чтобы на самом деле написать двоичный файл, вы обычно используете ofstream.write().

0
ответ дан 15 December 2019 в 06:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: