因此,我一直在尝试将一些数据从C转换为要压缩的数据,然后发送到位于golang中的库中,在该库中将对其解压缩。
唯一的问题是,它们之间的实现似乎略有不同。
我所做的是使用C语言的" zlib.h"库压缩字符串" hello",从而导致字节数
1 | [120 156 203 72 205 201 201 103 32 5] |
而在golang中,相同的字符串" hello"会导致数组
1 | [120 156 202 72 205 201 201 7 4 0 0 255 255 6 44 2 21] |
我的问题是,是否有办法使这些输出相似,这是什么? 还是至少可以在zlib中将C中的压缩数据解压缩?
我还研究了如何在golang中使用zlib与c中的zlib合作? 但我正在寻找更具体的东西,例如一个例子。
- 您所链接的问题的答案不是吗? 即,不能,您不能保证压缩数据是相似的-实现细节有所不同(尽管其中一个压缩的数据仍可以与另一个压缩)
- 对于用C压缩的东西在golang中解压缩似乎不起作用,它退出说它遇到了EOF
-
pigz命令不能解压缩您的第一个数组,而不会出现错误,如果我在gzip标头前面添加了gzip,那么gzip也不能解压缩,C程序的输出有问题。 (请注意,某些程序会解压缩它,例如
openssl zlib 或zlib-flate 命令,但它们对zlib中的错误的处理相当宽松)。 - 这是压缩输出的重复,与转到Ruby实现不同-ruby使用与C中使用的zlib库相同的库。
比较压缩数据不会告诉您任何信息。 不同的压缩器,或同一压缩器的不同版本,或用于不同设置的相同版本,都可以为同一输入提供不同的压缩输出。 对于无损压缩器而言,真正重要的是您是否可以将其解压缩为原始数据。
您的第一个示例的问题在于它不完整。 (第二个示例完整且正确。)第一个示例在deflate块的中间结束。 zlib的使用存在错误,要么是管理结果数据,要么是未正确请求完成压缩。
- 听起来合理,请检查我的C代码以进行zlib压缩