为什么zlib中的compress函数在windows和linux之间是不同的

时间:2017-02-15 07:31:41

标签: linux windows compression zlib

使用相同的zlib版本1.2.11和相同的代码:

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);
}

Windows的输出是: 78 9C 33 30 00 02 00 02 D5 00 F1

linux的输出是: 00 00 00 00 00 02 00 02 D5 00 F1

为什么他们没有相同的输出?

1 个答案:

答案 0 :(得分:0)

两种情况都有问题。第一个是至少一个有效的zlib流,但由于某种原因它编码5" 0"数字而不是40提供。第二个显然也有与第一个相同的问题, plus 它以前的四个字节以某种方式归零,因此它甚至不是有效的zlib流。

当我运行代码时(在(int) buf_len之前添加printf,只是为了避免警告),我得到了一个适当的zlib流来编码所有40&#34 ; 0"数字。我在Linux和Darwin(macOS)上运行它都没问题。