gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 06:56:01 24 4
gpt4 key购买 nike

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

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 endianess 也会出现问题,在不同机器架构之间传输这些文件时。

要解决字节顺序问题,您可以为文件定义一种兼容格式(例如,始终使用网络字节顺序(又名大字节序))来写入长度并使用 ntohl(), htonl() 中的函数。 family,与长度值相互转换。

关于c++ - 在 C++ 中以长度指示器方式从二进制文件中读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23168937/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com