Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

бинарные файлы

390
10 апреля 2006 года
lexus
143 / / 13.04.2004
Мне надо записать двоичные данные в файл.Я его открыл как binary, но данные туда записываются как строки:
...
ofstream file(filename,ios_base::binary);
file<<1.5f<<2;
file.close();
...
Результирующий файл:
1.52
Размер 4 байта вместо 8
Как правильно организовать запись двоичных данных в файл?
398
10 апреля 2006 года
Alexandoros
630 / / 21.10.2005
rtfm msdn:

Код:
//Streams were originally designed for text, so the default

//output mode is text.

//In text mode, the newline character

//(hexadecimal 10) expands

//to a carriage return–linefeed (16-bit only).

//The expansion can cause problems, as shown here:

// binary_output_files.cpp
// compile with: /EHsc
#include <fstream>
using namespace std;
int iarray[2] = { 99, 10 };
int main( )
{
    ofstream os( "test.dat" );
    os.write( (char *) iarray, sizeof( iarray ) );
}

//You might expect this program to output the byte sequence

//{ 99, 0, 10, 0 };

//instead, it outputs { 99, 0, 13, 10, 0 },which causes

//problems for a program expecting binary input.

//If you need true binary output, in which characters are

//written untranslated, you could specify binary output by

//using the ofstream constructor mode argument:

// binary_output_files2.cpp
// compile with: /EHsc
#include <fstream>
using namespace std;
int iarray[2] = { 99, 10 };

int main()
{
   ofstream ofs ( "test.dat", ios_base::binary );

   // Exactly 8 bytes written
   ofs.write( (char*)&iarray[0], sizeof(int)*2 );
}
See Also
Output Streams
390
11 апреля 2006 года
lexus
143 / / 13.04.2004
Это я прочитал в MSDN, а как это реализовать с помощью оператора <<
398
11 апреля 2006 года
Alexandoros
630 / / 21.10.2005
Цитата:
Originally posted by lexus
Это я прочитал в MSDN, а как это реализовать с помощью оператора <<



lexusну чего ты в самом деле? Написано ж Streams were originally designed for text.

Юзай CreateFile(), _open(), fopen().
Ну если уж приперло через потоки - то создай клас наследник от ofstream'a и в нем уже с помощью CreateFile/WriteFile реализуй оператор <<.

390
11 апреля 2006 года
lexus
143 / / 13.04.2004
Этот пример,кстати, у меня не компилируется
Выводит
e:\универ\4 семестр\дискретка\third\mainfrm.cpp(85) : error C2143: syntax error : missing ';' before '.'
390
11 апреля 2006 года
lexus
143 / / 13.04.2004
Цитата:
Originally posted by Alexandoros
lexusну чего ты в самом деле? Написано ж Streams were originally designed for text.

Юзай CreateFile(), _open(), fopen().
Ну если уж приперло через потоки - то создай клас наследник от ofstream'a и в нем уже с помощью CreateFile/WriteFile реализуй оператор <<.


ОК.Я так и думал.Я просто перегрузил операции << и >> в своем классе, хотел сделать через них

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог