C++ 将数据字节解析为结构

标签 c++ visual-c++

我是新来的,我有一个问题 我有一个结构,假设整体大小是 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/

相关文章:

c++ - 如何针对发布构建的库 (MSVCRT.lib) 构建调试 .exe (MSVCRTD.lib)?

c++ - QProcess 的最佳实现方式是什么,它读取 "real time"中的 stdout 和 stderr?

c++ - 如何创建流对象的集合

c++ - 将对象传递给多线程对象Qt

c++ - 使用模板而不是开关

c++ - 消息框错误

c++ - C++中跨数据类型的赋值

c++ - 简单内核模式驱动程序

visual-c++ - 如何在 Visual C++ 中将一些函数分组到 .exe 输出的新内存部分

c++ - 使用 Visual c++ 的多线程同步不起作用