【发布时间】:2014-05-28 07:30:10
【问题描述】:
我有一些结构:
struct dHeader
{
uint8_t blockID;
uint32_t blockLen;
uint32_t bodyNum;
};
struct dBody
{
char namestr[10];
uint8_t blk_version;
uint32_t reserved1;
}
我有一个字符串流:
std::stringstream Buffer(std::iostream::in | std::iostream::out);
我想用
将一个 dHdr 和多个 dBody 结构写入 BufferBuffer << Hdr1;
Buffer << Body1;
Buffer << Body1;
我得到错误:
错误:'缓冲区
如果我尝试一下:
Buffer.write(reinterpret_cast<char*>(&Hdr1), sizeof(dbHdr1));
Buffer.write(reinterpret_cast<char*>(&Body1), sizeof(Body1));
Buffer.write(reinterpret_cast<char*>(&Body2), sizeof(Body2));
我对打包和内存对齐感到困惑。
- 将结构写入字符串流的最佳方法是什么?
- 然后阅读 将字符串流转换成常规字符串?
【问题讨论】:
-
阅读
serialization,你想序列化 struct 。还有一个用于boost.org/doc/libs/1_55_0/libs/serialization/doc/index.html(以及其他)的 boost 库 -
您需要考虑几件事:您想要人类可读的东西,还是机器可读的东西(后者往往更简洁,打包/解析更快)?对于二进制流,您是否需要流中的某些内容让解包方知道已打包的内容,或者内容是可预测的?
-
生成的字符串将下载到卡上,因此不需要人类可读。
-
重载运算符 '
-
@mustafa,错误消息(与运算符不匹配...)准确地指出您没有超载
operator<<。请参阅下面的答案。
标签: c++ stringstream