使用gzread和inflate浮点值读取直到EOF

时间:2017-07-03 18:13:44

标签: c++ hex zlib tiff inflate

所以我有这个TIFF,压缩32946,这是COMPRESSION_DEFLATE。

我正在手动阅读并使用hexdump获取所有TIFF十六进制值。

我现在有一个值data3.txt,它包含来自hexdump的所有十六进制值。 Here它被粘贴到文档中:

到目前为止,这是我的zlib代码。

int main(int argc, char **argv) {
    gzFile inFileZ = gzopen("data4.txt", "rb");
    unsigned char unzipBuffer[4];
    gzread(inFileZ, unzipBuffer, 4);
    std::cout<<std::hex<<unzipBuffer<<std::endl;
    z_stream stream;
    stream.next_in = unzipBuffer;
    inflate(&stream, 1);
    float *f = (float *) unzipBuffer; 
    printf("%f\n", f);
    gzread(inFileZ, unzipBuffer, 4);
    std::cout<<std::hex<<unzipBuffer<<std::endl;
    stream.next_in = unzipBuffer;
    inflate(&stream, 1);
    f = (float *) unzipBuffer; 
    printf("%f\n", f);
    gzclose(inFileZ);
}

我不断获得正确的十六进制值,然后是0.0000。我做错了什么?

另外,如果不像上面那样复制粘贴代码,我怎样才能连续阅读gzread直到文件结尾?

1 个答案:

答案 0 :(得分:0)

gzopen返回指向gzfile的指针。 inFileZ应该是指针改变第一行:gzFile *inFileZ = gzopen("data4.txt", "rb"); 你可以阅读你的整个文件:

while(!gzeof(inFileZ){   
 //Your code 
}

确保包含zlib.h