2010-03-11 6 views
5

У меня есть следующий фрагмент кода на 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" должен быть в двоичном виде? Почему он не конвертирует все в двоичный, когда я открыл поток в двоичном режиме. Что мне делать, если мне нужен двоичный код каждого элемента массива, а затем распечатайте его в файле.

+0

Что вы подразумеваете под «in binary»? – GManNickG

+0

двоичные значения для соответствующих целых чисел в массиве, поэтому, если целое число в массиве равно 5, оно должно печатать 101 вместо 5 – Jay

+0

Ну, вам нужно использовать функцию 'write' для вывода необработанных данных. Но с этим он * делает * печатать 101 (ну, вероятно, больше как 0000000000000101) на диск, но все, что вы используете для просмотра файла, на самом деле не отображает исходные и нулевые значения. Средство просмотра текстовых файлов будет пытаться его декодировать (например, с ASCII), поэтому при открытии двоичных файлов в текстовом редакторе вы видите искаженное дерьмо. Вы никогда не видите 1 и 0. Возможно, более подходящим будет hex-редактор, который сделает это. – GManNickG

ответ

3

Не является ли «Sample.txt» предполагаемым в двоичном формате?

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

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

+0

Так как я могу написать массив как двоичные значения в файл? – Jay

+0

output.write ((char *) arr, sizeof (arr)); –

+0

если я говорю, output.write ((char *) arr [i], sizeof (int)); программа crashed и output.write ((char *) arr, sizeof (arr)) ничего не печатает в файле Sample.txt – Jay

0

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

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

0

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

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

0

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

See:

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

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

Смежные вопросы