如何在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格式保存的文件的示例将帮助我做到这一点。
答案 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));
但是,可能仍然不正确!如果文件是用另一个订单写的,该怎么办?或者,如果完整的结构是一次性写入,可能的填充和所有?你需要完全按照它的写作来阅读它。
此外,您必须确保文件以二进制模式打开,否则您可能会得到奇怪的结果。