【问题标题】:ASC-GZIP decoding in Objective CObjective C 中的 ASC-GZIP 解码
【发布时间】:2013-03-08 23:58:18
【问题描述】:

我一直在互联网上搜索一个库或一段代码,它们可以帮助我用这种编码类型解压缩 XFDL 文件:application/x-xfdl;content-encoding="asc-gzip"。我处理过的所有以前的 XFDL 文件都有这种类型的编码:application/vnd.xfdl;content-encoding="base64-gzip",我使用 Base64 和 GZIP 没有问题(github 上的两个库由尼克洛克伍德撰写)。我在 Python 中找到了可以解压这些类型文件的代码,位于:http://www.ourada.org/blog/archives/375,但我不知道如何将这段代码实现到 Objective-C 项目中。

任何帮助或在正确方向上的推动将不胜感激。

谢谢!

【问题讨论】:

    标签: ios xcode gzip


    【解决方案1】:

    我发现的asc-gzip 示例实际上是zlib,然后是base-64 编码的。它被分成块,每个块前面都是按大端顺序压缩和未压缩的长度,每个块两个字节。

    所以要解码:

    1. Base-64 解码整个事物。然后在解码的字节上:
    2. 从前两个字节以大端顺序计算下一个压缩长度。称呼 它c
    3. 从接下来的两个计算下一个未压缩的长度 大端顺序的字节。叫它u
    4. 使用zlib解码zlib流,包括 接下来的 c 个字节。验证 zlib 是否准确解码了 c 个字节,并且生成的未压缩数据正是 u 字节长。
    5. 从第 2 步开始重复,直到数据用完。 (应该全部用完。)

    有趣的是,“asc”和“gzip”在编码名称中都是用词不当。 asc 真正意味着 base 64,gzip 真正意味着 zlib。去图吧。

    【讨论】:

    • 我不熟悉 XCode 中的大端和字节处理。我一直在阅读 Core Endian Reference 的内容,但我会瞪大眼睛。您是否有任何适用于 iOS 的代码?非常感谢您到目前为止的回答!
    • 要以大端顺序读取两个字节,只需将第一个字节读取为无符号 8 位整数 (unsigned char),将其乘以 256,然后将第二个字节添加为无符号 8-位整数。瞧。
    • @jimmybondy 不。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-12
    • 2011-06-22
    • 1970-01-01
    • 1970-01-01
    • 2011-03-02
    • 2012-12-10
    • 1970-01-01
    相关资源
    最近更新 更多