如何以长度指示器方式正确读取二进制文件? 我正在做这样的事情,但它一直给我奇怪的结果:
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);
答案 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()
系列中的函数进行转换来自长度值。