gzip文件大小是如何编码的?

时间:2014-09-24 21:40:23

标签: c++ c encoding gzip

gzip文件格式包含在压缩文件的最后4个字节中编码的(未压缩/原始)文件大小。 “gzip -l”命令报告压缩和未压缩的大小,压缩率和原始文件名。

查看stackoverflow,有几个提到解码最后4个字节中编码的大小。

大小的编码是多少? Big-endian(最重要的字节优先),Little-endian(最低有效字节优先),是值有符号还是无符号?

此代码段似乎对我有用,

FILE* fh; //assume file handle opened
unsigned char szbuf[4];
struct stat statbuf;
fstat(fn,&statbuf);
unsigned long clen=statbuf.st_size;
fseek(fh,clen-4,SEEK_SET);
int count=fread(szbuf,1,4,fh);
unsigned long ulen = ((((((szbuf[4-1] << 8) | szbuf[3-1]) << 8) | szbuf[2-1]) << 8) | szbuf[1-1]);

以下是一些相关帖子,这些帖子似乎暗示了小端和无符号长(0..4GB-1)。

Determine uncompressed size of GZIP file

GZIPOutputStream not updating Gzip size bytes

Determine size of file in gzip

Gzip.org has more information about Gzip

1 个答案:

答案 0 :(得分:4)

RFC说它的模2 ^ 32意味着uint32_t,而使用.Net GZipStream的实验则将其视为小端。

RFC 1952