2017-02-15 37 views
0

在相同的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

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

回答

0

两种情况都有问题。第一个是至少一个有效的zlib流,但由于某些原因,它编码五个“0”数字而不是提供的40个。第二个显然也有第一个问题,加上它有前四个字节以某种方式清零,所以它甚至不是有效的zlib流。

当我运行的代码(在printfbuf_len之前添加在(int),只是为了避免警告),我得到一个适当的zlib流,其编码所有40个“0”的数字。我在Linux和Darwin(macOS)上运行它,没有任何问题。