【问题标题】:Binary Files on 32bit / 64bit systems?32 位/64 位系统上的二进制文件?
【发布时间】:2011-09-08 20:14:43
【问题描述】:

我正在使用python struct 模块来创建自定义二进制文件。

文件本身的格式如下:

4 bytes(整数) 1 byte(无符号字符) 4 bytes(浮点数)

4 bytes(整数) 1 byte(无符号字符) 4 bytes(浮点数)

.......................(100000 行这样的行

4 bytes(整数) 1 byte(无符号字符) 4 bytes(浮点数)


目前,我使用 32 位机器 来创建这些自定义二进制文件。我很快就打算改用 64 位机器

我能否使用两台{32bit / 64bit} 机器读取/写入相同的文件?还是我应该预料到兼容性问题?

(我将同时使用 Ubuntu Linux)

【问题讨论】:

    标签: python serialization 32bit-64bit


    【解决方案1】:

    只要您的结构格式字符串使用“标准大小和对齐方式”(<>)而不是“本机大小和对齐方式”(@),您的文件就可以跨平台使用。

    【讨论】:

      【解决方案2】:

      http://docs.python.org/library/struct.html#byte-order-size-and-alignment

      默认情况下,C 类型以机器的本机格式和字节顺序表示,并在必要时通过跳过填充字节来正确对齐(根据 C 编译器使用的规则)。

      所以它是否可移植取决于您的代码。

      【讨论】:

        【解决方案3】:

        您需要担心的不仅仅是 32 位与 64 位。您所说的广义类别称为序列化

        查看marshal 和/或pickle 模块。

        【讨论】:

        • 谢谢。我正在创建自己的格式。如果我可以使用 32/64 位系统读取/写入这两个文件——我为什么要担心 marshalpickle
        • 如果您只关心 x86 与 x86_64,那么您当然可以推出自己的解决方案。但是,如果您使用标准编组机制——担心字节顺序和浮点表示以及字长——您可以确定您的代码将来会移植到任何系统。您必须编写的代码量将大致相同;也许更少。所以问题是,为什么您要明确指定外部格式并使用适当的编组?
        猜你喜欢
        • 1970-01-01
        • 2021-11-18
        • 2020-07-06
        • 1970-01-01
        相关资源
        最近更新 更多