在C ++中以长度指示器方式从二进制文件中读取

时间:2014-04-19 10:37:55

标签: c++ file binary

如何以长度指示器方式正确读取二进制文件? 我正在做这样的事情,但它一直给我奇怪的结果:

size_t len;
string stuff;

stream.read ((char *)&len, sizeof(size_t));
stream.read ((char *)&stuff, len);

我是这样写的:

ostringstream temp;
temp << p.bee;
string tempbee = temp.str();


size_t len = sizeof(tempbee);
stream.write ((char *)&len, sizeof(tempbee));
stream.write ((char *)&tempbee, len);

1 个答案:

答案 0 :(得分:1)

您的代码应如下所示:

size_t len;
string stuff;

stream.read ((char *)&len, sizeof(size_t));
stuff.resize(len,0x00);
stream.read ((char *)&stuff[0], len);

size_t len = tempbee.size();
stream.write ((char *)&len, sizeof(size_t));
stream.write ((char *)&tempbee[0], len);

在不同的计算机架构之间传输这些文件时,也会发现len endianess 出现问题。

要解决字节序问题,您可以为文件定义兼容性格式(例如,始终使用网络字节顺序(也称为大字节序))来编写长度并使用ntohl(), htonl()系列中的函数进行转换来自长度值。