我是新来的,我有一个问题 我有一个结构,假设整体大小是 8 个字节,这里是结构:
struct Header
{
int ID; // 4 bytes
char Title [4]; // 4 bytes too
}; // so it 8 bytes right?
我也有一个 8 字节的文件... 我只想问,如何将那个文件上的数据解析成那个的结构
我试过这个:
Header* ParseHeader(char* filename)
{
char* buffer = new char[8];
fstream fs(filename);
if (fs.is_open() != true)
throw new exception("Couldn't Open file for Parsing Header.");
fs.read(buffer, 8);
if (!fs)
{
delete[] buffer;
throw new exception("Couldn't Read header OJN file.\nHeader data was corrupted");
}
Header* header = (Header*)((void*)buffer);
delete[] buffer;
fs.close();
return header;
}
但它失败了,并返回了比我预期的无效的数据(我可以确定,这不是文件错误,文件结构正确)
有人可以帮助我吗? 谢谢
最佳答案
到目前为止,您似乎一切都很好:
Header* header = (Header*)((void*)buffer);
delete[] buffer;
fs.close();
请注意,您在转换后删除了缓冲区,这意味着 header 指向已删除的位置 -> 垃圾,如果您仍想使用数据,则需要不删除或复制数据。
另外,老实说,我不明白你的代码是如何编译的,你的函数声明它返回一个 Header,而你返回一个 Header*..
关于C++ 将数据字节解析为结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15631364/