如何在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));
但是,它可能仍然不正确!如果文件是用另一个命令写入的怎么办?或者,如果完整的结构是一次性编写的,可能的填充和所有?您需要按原样阅读。
此外,您必须确保文件是以二进制模式打开的,否则您可能会得到奇怪的结果。
关于c++ - 使用struct c++读取压缩文件Gzread,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21902568/