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



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

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);

您的代码应该看起来像:

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字节序也会出现问题。

为了解决endianes问题,您可以为文件定义一种兼容格式(例如,始终使用网络字节顺序(又名big-endian))来写入长度,并使用ntohl()htonl()系列的函数来转换为长度值。

相关内容

  • 没有找到相关文章

最新更新