【问题标题】:Reading complex binary file formats读取复杂的二进制文件格式
【发布时间】:2011-04-25 00:33:46
【问题描述】:

有没有什么书或教程可以教我如何阅读具有复杂结构的二进制文件。我做了很多尝试来制作一个必须读取复杂文件格式并将其保存在结构中的程序。但它总是因为堆溢出等导致程序崩溃而失败。

【问题讨论】:

    标签: c file-structure


    【解决方案1】:

    您最好的选择可能是查找有关二进制网络协议而不是文件格式的信息。主要问题(字节顺序、结构打包、序列化和反序列化指针,......)是相同的,但网络人往往更清楚这些问题,并且更明确地处理它们。从线路读取和写入二进制 blob 与处理磁盘上的二进制 blob 并没有太大区别。

    您还可以在开源图形包(例如netpbmThe Gimp)中找到很多现有示例。一个开源的办公包(例如LibreOffice)也会为您提供大量处理复杂和令人费解的二进制格式的示例代码。

    Google's Protocol Buffers 或老式的 ONC RPC 和 XDR 甚至可能对您有用。

    我不知道任何有关此类事情的书籍或手册,但也许一堆现实生活中的工作示例对您来说比 HOWTO 指南更有用。

    【讨论】:

    • 我真的很想避免使用库和框架(我不在乎他们如何称呼它)。我想使用标准的 C 函数,我正在寻找一个很好的教程,它解释了如何在读取文件时避免程序崩溃(所有与内存分配、垃圾收集等有关的事情)。
    • @Midas:我指的是执行类似任务的示例。读取文件时避免崩溃并没有什么特别之处,避免崩溃是一项通用的内存管理任务。最接近特殊的是“不要将fread 直接放入结构中,手动逐字节解压缩”,示例将向您展示如何正确执行此操作。
    【解决方案2】:

    调试内存访问问题的最佳工具之一是 valgrind。下次我会试试的。至于书籍,您需要更具体地了解要解析的格式。格式有很多种,其中许多格式彼此完全不同。

    【讨论】:

      【解决方案3】:

      查看Flavor。它允许您使用类似 C 的结构指定格式,并将自动生成 C++ 或 Java 中数据的解析器。

      【讨论】:

        猜你喜欢
        • 2010-11-28
        • 1970-01-01
        • 2012-08-19
        • 1970-01-01
        • 1970-01-01
        • 2021-09-08
        • 2016-12-26
        • 1970-01-01
        相关资源
        最近更新 更多