【问题标题】:how do I use zlib to compress in C and uncompress in golang如何使用 zlib 在 C 中压缩并在 golang 中解压缩
【发布时间】:2018-10-24 23:03:01
【问题描述】:

所以我一直在尝试将 C 中的一些数据转换为压缩并发送到 golang 中的库,然后将其解压缩。 唯一的问题是,它们之间的实现似乎略有不同。

我所做的是使用 C 中的“zlib.h”库来压缩字符串“hello”,从而产生

[120 156 203 72 205 201 201 103 32 5]

在 golang 中,对于相同的字符串 "hello" 会产生一个数组

[120 156 202 72 205 201 201 7 4 0 0 255 255 6 44 2 21]

我的问题是是否有办法使这些输出相似,它是什么?或者至少可以在zlib中解压缩C中的压缩数据?

我也查看了How can I use zlib in golang to cooperate with zlib in c?,但我正在寻找更具体的内容,例如示例。

【问题讨论】:

  • 您链接的问题中的答案不是吗?即不,您不能保证压缩数据是相似的 - 实现细节存在差异(尽管其中一个压缩的数据仍然可以与另一个解压缩)
  • 在 golang 中对 C 中压缩的东西的解压似乎不起作用,它退出说它遇到了 EOF
  • pigz 命令无法在没有错误的情况下解压缩您的第一个数组,如果我在前面加上 gzip 标头,gzip 也不能,您的 C 程序的输出有问题。 (注意,有些程序会解压它,例如openssl zlibzlib-flate 命令,但它们对来自 zlib 的错误的处理相当松散)。
  • 这是 Compressed output differs from Go to Ruby Implementation 的副本 - ruby​​ 使用与 C 中相同的 zlib 库。

标签: c go zlib


【解决方案1】:

比较压缩数据不会告诉您什么。不同的压缩器,或相同压缩器的不同版本,或使用不同设置的相同版本,都可以为相同的输入提供不同的压缩输出。无损压缩器真正重要的是您是否可以解压缩到原始数据。

您的第一个示例的问题在于它不完整。 (第二个例子是完整且正确的。)第一个例子在一个放气块的中间结束。您在使用 zlib 时出现错误,无论是管理结果数据还是未正确请求完成压缩。

【讨论】:

  • 听起来很合理,我会检查我的 C 代码是否有 zlib 压缩
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多