2017-02-15 49 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)上運行它,沒有任何問題。