使用相同的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
为什么他们没有相同的输出?
答案 0 :(得分:0)
两种情况都有问题。第一个是至少一个有效的zlib流,但由于某种原因它编码5" 0"数字而不是40提供。第二个显然也有与第一个相同的问题, plus 它以前的四个字节以某种方式归零,因此它甚至不是有效的zlib流。
当我运行代码时(在(int)
buf_len
之前添加printf
,只是为了避免警告),我得到了一个适当的zlib流来编码所有40&#34 ; 0"数字。我在Linux和Darwin(macOS)上运行它都没问题。