@HighMan

Можно в c++ ли работать с памятью через stream?

С потоками я знаком ооочень слабо. Только сейчас пытаюсь разобраться.
Возможно ли что-то вроде нижеприведенного кода?
int a = 10;
char str[] = "This string";
float money = 0.1;
char * buf = new char [1024];
buf << a << str << money;
// .....
delete [] buf;

Думаю, понятно, что я хочу получить, но для простоты:
typedef staruct {
  int a = 10;
  char str[256];
  float money = 0.1;
}HZ;
HZ hz;
char * buf = (char *)malloc(1024);
memcpy(buf, &hz, sizeof(HZ))
  • Вопрос задан
  • 106 просмотров
Пригласить эксперта
Ответы на вопрос 2
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Класс std::stringstream как раз это и реализует.
#include <stringstream>

std::stringstream sout;
sout << "some string " << 42;
cout << sout.str();


Но для сериализации эффективнее будет руками записывать данные в буфер через memcopy: все члены структуры по отдельности чтобы не было проблем с выравниванием. Для строк переменной длины надо будет писать еще и их размер отдельно. Для чисел надо аккуратно с порядком байт разобраться и писать их побайтово.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы