我试图使用ifstream的read()函数加载定义为结构的不同块的RTCW BSP文件,但是当我查看变量时,我得到错误的值调试器。用ifstream读取二进制结构read()
第2层结构的定义是这样的:
struct DirEntry
{
int offset;
int length;
};
struct Header
{
char magic[4];
int version;
DirEntry direntries[17];
};
我用来读取的代码是这样的:
bool XWorldMap::Load(string filename, ID3D10Device* pd3d)
{
ifstream mapfile;
mapfile.open(filename.c_str(), ios::binary);
if (!mapfile.is_open())
return false;
else
{
// read in header
Header head;
mapfile.read((char*)(&head), sizeof(head));
}
return true;
}
我也试过这样:
Header head;
mapfile.read((char*)(&head.magic), sizeof(head.magic));
mapfile.read((char*)(&head.version), sizeof(head.version));
仍然没有得到正确的价值观。
我敢肯定,它与文件中的结构填充这样做,但我不知道如何正确设置它...
感谢。
您可以尝试创建一个'Header',将其写入一个文件,将其读入一个新的'Header',然后检查它是否相同。像这样的[mcve]应该可以帮助你找到问题所在。 – NathanOliver
您可以向您的问题添加您尝试加载的文件的初始部分的十六进制转储吗? – Yojimbo