【问题标题】:Ruby-like C# Zlib string inflate类 Ruby 的 C# Zlib 字符串膨胀
【发布时间】:2018-04-09 12:09:15
【问题描述】:

最终目标: 我想读取一个 rxdata 文件,在给定程序状态的情况下,该文件在 Ruby 中用Zlib::Deflate.deflate 压缩。我无法在 Ruby 中使用 Zlib::Inflate.inflate。因此,我研究了 C#。

假设我在 Ruby 中有这个压缩字符串:

X\x85\xCBH\xAD\x04\x00\xF0\x15\xD6\x88

如果我在 Ruby 中对其运行 Zlib::Inflate.inflate,它会给我一个包含 hey 的字符串。

现在,如果我在 C# 中有这个压缩字符串,有没有一种简单的方法可以将它膨胀成 hey 的字符串?

我已经看过Ionic.Zlib,但我无法从中获得更多智慧。


我对压缩等知之甚少。

【问题讨论】:

  • 您可能想使用DeflateStream。我会详细说明,但我现在正在使用移动设备
  • 您知道具体使用哪些方法吗?我已经用 DeflateStream 尝试了几件事,但运气不佳。编辑:啊,明白了。
  • 恐怕我自己不是压缩专家,可能会有不同的标头数据或比较 Ruby 的 ZLib 和 C# 的东西。请注意,如果您的目标是 .NET 4.5 或更高版本,C# 仅在使用其他算法之前使用 ZLib。让我试试看能不能解压你的字符串。
  • 是否可以获得“正常”十六进制或十进制数字的原始字节值?我不知道如何解析您发布的字符串并且不知道 Ruby。我尝试在 C# 中压缩“嘿”,得到了类似的东西,但只包含 5 个字节,不知道如何比较。

标签: c# zlib inflate


【解决方案1】:

你确定这在 Ruby 中有效吗?对于这些字节,我在 Ruby 中得到“Zlib::DataError:不正确的数据检查”,这是正确的!该 zlib 流对数据“嘿”具有不正确的 Adler-32 检查值。

【讨论】:

  • 这一定是我在 C# 中的输出略有不同的原因! :-)
  • 应该是。 Zlib::Deflate.deflate('hey') 返回X\x85\xCBH\xAD\x04\x00\xF0\x15\xD6\x88
  • irb(main):004:0> Zlib::Deflate.deflate('hey') => "x\x9C\xCBH\xAD\x04\x00\x02~\x01G"
猜你喜欢
  • 1970-01-01
  • 2020-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-10
  • 2014-07-25
相关资源
最近更新 更多