使用结构 c++ 读取压缩文件 Gzread

reading compressed file Gzread using struct c++

本文关键字:压缩 文件 Gzread 读取 c++ 结构      更新时间:2023-10-16

如何在 C++ 中读取压缩结构格式的数据?

这是数据结构。

struct test
{
    unsigned int test3;
    unsigned char test1[4096];
    unsigned int test2;
} foo;

我们如何读取使用 gzread 写入文件的结构?

这是我尝试过的。

gzread(Handle,&foo.test3, sizeof(&foo.test3)); //64
gzread(Handle,&foo.test1, sizeof(&foo.test1)); //4096
gzread(Handle,&foo.test2,sizeof(&foo.test2)); //4

但是,我得到的数据是错误的。我犯了什么错误?

如何读取以结构格式保存的文件的示例将帮助我做到这一点。

当你执行&foo.test1时,你会得到一个指针,当你在该指针上使用sizeof时,你会得到指针的大小,而不是它指向的内容。根据平台的不同,这将是4(对于 32 位平台)或8(对于 64 位平台)。

要使代码正常工作,应放弃对sizeof操作使用 & 操作数:

gzread(Handle, &foo.test3, sizeof(foo.test3));
gzread(Handle, &foo.test1, sizeof(foo.test1));
gzread(Handle, &foo.test2, sizeof(foo.test2));

但是,它可能仍然不正确!如果文件是用另一个顺序写入的怎么办?或者如果完整的结构是一次性编写的,可能的填充和所有?您需要完全按照所写的方式阅读它。

另外,您必须确保文件以二进制模式打开,否则您可能会得到奇怪的结果。