为什么在zlib的压缩功能是Windows和Linux
问题描述:
在相同的zlib版本1.2.11和相同的代码之间的不同:为什么在zlib的压缩功能是Windows和Linux
char * msg = "0000000000000000000000000000000000000000";
unsigned char buf[1024]={0};
unsigned long buf_len=1024;
FILE *f;
int ret = compress(buf,&buf_len,(const Bytef*)msg,strlen(msg));
printf("ret:%d,%.*s\n",ret,buf_len,buf);
f = fopen("output.txt","wb");
if(f)
{
fwrite(buf,buf_len,1,f);
fclose(f);
}
窗户的输出是: 78 9C 33 30 00 02 00 02 D5 00 F1
了Linux的输出是: 00 00 00 00 00 02 00 02 00 D5 F1
为什么他们没有相同的输出?
答
两种情况都有问题。第一个是至少一个有效的zlib流,但由于某些原因,它编码五个“0”数字而不是提供的40个。第二个显然也有第一个问题,加上它有前四个字节以某种方式清零,所以它甚至不是有效的zlib流。
当我运行的代码(在printf
的buf_len
之前添加在(int)
,只是为了避免警告),我得到一个适当的zlib流,其编码所有40个“0”的数字。我在Linux和Darwin(macOS)上运行它,没有任何问题。