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

标签 c++ data-structures gzip

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

相关文章:

c++ - shmget 大小限制问题

python - 按接近度对一组点进行分组

linux - 多个 GZip 文件的快速连接

c++ - OutputIterator 从 std::copy 返回

使用了 C++ 未初始化的变量

c++ - 混合 constexpr 声明和 const 定义

java - 按字母顺序打印树数据结构

java - 使用四叉树获取边界圆内的所有点

http - 可以 gzip 压缩对 http 请求错误的响应吗?

http - 什么编码字符串告诉 Web 服务器不要发送 gzip 内容?