2017-02-15 38 views
0

с теми же ZLib версиями 1.2.11 и тем же кодом:почему функция компресса в Zlib отличается между окнами и 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.

Когда я запускаю код (добавление в (int) перед buf_len в printf, просто чтобы избежать предупреждений), я получаю правильный поток ZLIB, который кодирует все 40 «0» цифры. Я запускал его как на Linux, так и на Darwin (macOS) без проблем.