Читайте до EOF со значениями gzread и float

Итак, у меня есть этот TIFF со сжатием 32946, который является COMPRESSION_DEFLATE.

Я читаю это вручную и получил все шестнадцатеричные значения TIFF, используя hexdump.

Теперь у меня есть значение data3.txt, которое содержит все шестнадцатеричные значения из hexdump.
Вот это вставлено в документы:

Это мой 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

Решение

gzopen возвращает указатель на gzfile. inFileZ должен быть указателем, измените первую строку на: gzFile *inFileZ = gzopen("data4.txt", "rb");
Вы можете прочитать весь файл с помощью:

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

Убедитесь, что zlib.h включен

0

Другие решения

Других решений пока нет …