Есть ли аналог QDataStream в STL?
От: Figaro Россия  
Дата: 20.11.09 19:21
Оценка:
subj
Мы уничтожим все порты или города для того, чтобы достичь наших мирных целей. Г. Трумэн, президент США.
Re: Есть ли аналог QDataStream в STL?
От: McQwerty Россия  
Дата: 21.11.09 09:48
Оценка: 2 (1)
Здравствуйте, Figaro, Вы писали:

F>subj

std::fstream — ввод/вывод файлов
std::strstream — ввод/вывод в памяти

fstream f ("data.bin");
f << 1 << "ABC" << 3.14;
Re[2]: Есть ли аналог QDataStream в STL?
От: igna Россия  
Дата: 23.11.09 10:16
Оценка: :)
Здравствуйте, McQwerty, Вы писали:

MQ>fstream f ("data.bin");
MQ>f << 1 << "ABC" << 3.14;


Думаешь, достаточно добавить .bin к имени файла? Нет уж, выведены будут не двоичные, а текстовые данные.
Re[3]: Есть ли аналог QDataStream в STL?
От: blackhearted Украина  
Дата: 23.11.09 12:38
Оценка: :))
Здравствуйте, igna, Вы писали:

I>Здравствуйте, McQwerty, Вы писали:


I>
MQ>>fstream f ("data.bin");
MQ>>f << 1 << "ABC" << 3.14;
I>


I>Думаешь, достаточно добавить .bin к имени файла? Нет уж, выведены будут не двоичные, а текстовые данные.


Открыть поток как бинарный???

 fstream filestr ("test.txt", fstream::in | fstream::out | fstream::binary);


Re[4]: Есть ли аналог QDataStream в STL?
От: igna Россия  
Дата: 23.11.09 14:49
Оценка:
Здравствуйте, blackhearted, Вы писали:

B>Открыть поток как бинарный???


B> fstream filestr ("test.txt", fstream::in | fstream::out | fstream::binary);


Все равно будет выведен текст.
Re[5]: Есть ли аналог QDataStream в STL?
От: blackhearted Украина  
Дата: 23.11.09 16:30
Оценка:
Здравствуйте, igna, Вы писали:

I>
B>> fstream filestr ("test.txt", fstream::in | fstream::out | fstream::binary);
I>


I>Все равно будет выведен текст.


И как же правильно сделать?
Re[6]: Есть ли аналог QDataStream в STL?
От: igna Россия  
Дата: 23.11.09 16:48
Оценка:
Здравствуйте, blackhearted, Вы писали:

B>И как же правильно сделать?


void write_binary_int_to_stream(ostream& out, int const i)
{
    out.write(interpret_cast<char const*>(&i), sizeof i);
}

void write_binary_double_to_stream(ostream& out, double const x)
{
    out.write(interpret_cast<char const*>(&x), sizeof x);
}


Или шаблон:

template <class T>
void write_binary_to_stream(ostream& out, T const& t)
{
    out.write(static_cast<char const*>(&t), sizeof t);
}


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

И возможно лучше использовать streambuf вместо ostream.

Впрочем вряд ли streambuf или ostream можно рассматривать как аналог QDataStream.
Re[7]: Есть ли аналог QDataStream в STL?
От: byleas  
Дата: 23.11.09 17:54
Оценка:
Здравствуйте, igna, Вы писали:

I>Вывод строк зависит от того, в каком формате их нужно записывать, с префиксом-длиной или заключительным нулем.

Qt пишет оба варианта для ASCIIZ и первый для строк с указанной длиной.

I>И возможно лучше использовать streambuf вместо ostream.

Нет, т.к. форматированием (преобразованием всего в текстовые данные) занимается именно xstream. Так что писать либо свой класс потока, либо вышеупомянутая функция.
Re[8]: Есть ли аналог QDataStream в STL?
От: igna Россия  
Дата: 23.11.09 18:19
Оценка:
Здравствуйте, byleas, Вы писали:

B>Нет, т.к. форматированием (преобразованием всего в текстовые данные) занимается именно xstream.


Зачем это преобразование, если вывод двоичный?
Re[9]: Есть ли аналог QDataStream в STL?
От: byleas  
Дата: 23.11.09 18:38
Оценка:
Здравствуйте, igna, Вы писали:

I>>>И возможно лучше использовать streambuf вместо ostream.

B>>Нет, т.к. форматированием (преобразованием всего в текстовые данные) занимается именно xstream.
I>Зачем это преобразование, если вывод двоичный?
Я говорю о том, что буфер (streambuf) не поможет в этой задаче (двоичного ввода/вывода) и нужно работать (переписывать полностью или использовать write_binary_to_stream) именно с ostream или istream.
Re[10]: Есть ли аналог QDataStream в STL?
От: igna Россия  
Дата: 24.11.09 07:07
Оценка:
Здравствуйте, byleas, Вы писали:

B>Я говорю о том, что буфер (streambuf) не поможет в этой задаче (двоичного ввода/вывода) и нужно работать (переписывать полностью или использовать write_binary_to_stream) именно с ostream или istream.


А я о том, что возможности форматирования потока не помогут в этой задаче (двоичного ввода/вывода) и можно работать непосредственно с буфером.
Re[11]: Есть ли аналог QDataStream в STL?
От: byleas  
Дата: 24.11.09 07:44
Оценка:
Здравствуйте, igna, Вы писали:

I>Здравствуйте, byleas, Вы писали:


B>>Я говорю о том, что буфер (streambuf) не поможет в этой задаче (двоичного ввода/вывода) и нужно работать (переписывать полностью или использовать write_binary_to_stream) именно с ostream или istream.

I>А я о том, что возможности форматирования потока не помогут в этой задаче (двоичного ввода/вывода) и можно работать непосредственно с буфером.
А как же удобство записи? Или использовать sputc/sputn, или operator <</>>. Вот для удобства и написать свой stream. Да и минимальное "форматирование" всё-таки есть: перевод little-endian, если надо, и запись размера для строк.
Re[12]: Есть ли аналог QDataStream в STL?
От: igna Россия  
Дата: 24.11.09 09:24
Оценка:
Здравствуйте, byleas, Вы писали:

B>А как же удобство записи? Или использовать sputc/sputn, или operator <</>>.


operator<< для записи двоичных данных?

B>Да и минимальное "форматирование" всё-таки есть: перевод little-endian, если надо, и запись размера для строк.


Это у кого оно есть?
Re[13]: Есть ли аналог QDataStream в STL?
От: byleas  
Дата: 24.11.09 11:09
Оценка:
Здравствуйте, igna, Вы писали:

I>operator<< для записи двоичных данных?

А чем плохо? B QDataStream же есть такое.

B>>Да и минимальное "форматирование" всё-таки есть: перевод little-endian, если надо, и запись размера для строк.

I>Это у кого оно есть?
У QDataStream.
Re[14]: Есть ли аналог QDataStream в STL?
От: igna Россия  
Дата: 24.11.09 11:12
Оценка:
Здравствуйте, byleas, Вы писали:

I>>operator<< для записи двоичных данных?

B>А чем плохо? B QDataStream же есть такое.

Ну так я же streambuf не вместо QDataStream, а вместо ostream использовать предлагаю.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.