У меня есть следующая часть кода в 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", как предполагается, не находится в двоичном файле? Почему это не преобразовывает все в двоичный файл, когда я открыл поток в режиме двоичного счета. Что я должен сделать, упаковать, я нуждаюсь в двоичном файле каждого элемента в массиве и затем печатаю его в файл.
Разве "Sample.txt" не должен быть двоичным?
Нет. Что делает std :: ios :: binary
, так это предотвращение таких вещей, как перевод '\ n'
из / в зависящий от платформы EOL. Он не пропустит перевод между внутренним представлением байтов данных и их строковым переводом. В конце концов, это и есть стримы. (Также подумайте о том, как вы будете передавать объект пользовательского типа, содержащий указатели в двоичном представлении.)
Для фактической записи двоичных объектов используйте std :: ostream :: write ()
. Однако будьте осторожны, результат зависит от платформы.
Двоичный формат означает, что символы новой строки не преобразуются в / из формата, специфичного для ОС. Вывод значения типа int
с ofstream
отформатирует его как десятичное число (обычный текст ASCII).
Для того, что вы подразумеваете под двоичным кодом, вам лучше писать значения типа char
или использовать функцию без форматирования output.write
( документы здесь ) .
Двоичный формат как «не текст» означает, что форматирование не выполняется, как новые строки и так далее.
См. :
Файловые потоки, открытые в двоичном режиме , выполняют операции ввода и вывода независимо от любого формата . Небинарные файлы известны как текстовые файлы, и некоторые переводы могут происходить из-за форматирования некоторых специальных символов (например, новой строки и возврата каретки {{ 1}} символов).
Он не будет переведен в формат 0
и 1
. Все на компьютере использует двоичный формат
, но когда вы открываете файл и читаете его с помощью редактора, редактор считывает двоичные данные и отображает символы ASCII для вас.
Двоичный режим в основном означает, что (например) не будет преобразования между символом новой строки, который вы программируете, и тем, что ваша платформа думает, что это конец строки (например, «\r\n» в Windows, «\r» на Ma).
Чтобы на самом деле написать двоичный файл, вы обычно используете ofstream.write()
.