使用struct c ++读取压缩文件Gzread

时间:2014-02-20 08:49:14

标签: c++ data-structures gz

如何在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

然而,我得到的数据是错误的。 我在做什么错误?

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

1 个答案:

答案 0 :(得分:1)

当你执行&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));

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

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