Как читать данные в сжатом формате структуры в 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, поможет мне это сделать.
Когда вы делаете &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));
Однако это может быть и не так! Что, если файл был написан с другим заказом? Или, если полная структура была написана за один раз, возможное дополнение и все? Вам нужно прочитать его точно так, как было написано.
Кроме того, вы должны убедиться, что файл был открыт в двоичном режиме, или вы можете получить странные результаты.