gpt4 book ai didi

python - 在 64 位系统上读取 32 位打包二进制数据

转载 作者:行者123 更新时间:2023-11-28 20:30:01 24 4
gpt4 key购买 nike

我正在尝试编写一个 Python C 扩展来读取打包的二进制数据(它存储为结构的结构),然后将其解析为 Python 对象。在 32 位机器上一切都按预期工作(二进制文件总是写在 32 位架构上),但在 64 位机器上却不行。有没有“首选”的方式来做到这一点?


要发布的代码会很多,但举个例子:

struct
{
WORD version;
BOOL upgrade;
time_t time1;
time_t time2;
} apparms;

File *fp;
fp = fopen(filePath, "r+b");
fread(&apparms, sizeof(apparms), 1, fp);
return Py_BuildValue("{s:i,s:l,s:l}",
"sysVersion",apparms.version,
"powerFailTime", apparms.time1,
"normKitExpDate", apparms.time2
);

现在在 32 位系统上效果很好,但在 64 位系统上我的 time_t 大小不同(32 位与 64 位长)。


该死的,你们这些人太快了。

Patrick,我最初开始使用 struct 包,但发现它只是为了满足我的需要而减慢速度。另外,我正在寻找编写 Python 扩展的借口。

我知道这是一个愚蠢的问题,但我需要注意哪些类型?

谢谢。

最佳答案

明确指定您的数据类型(例如整数)是 32 位的。否则,如果当您读取两个整数时,它们将被读取为一个 64 位整数。

当您处理跨平台问题时,需要注意的两个主要事项是:

  1. 位数。如果您的打包数据是用 32 位整数写入的,那么您的所有代码在读取写入时都必须明确指定 32 位整数。
  2. 字节顺序。如果您将代码从 Intel 芯片移至 PPC 或 SPARC,您的字节顺序将是错误的。您将必须导入数据,然后对其进行字节翻转,使其与当前架构相匹配。否则 12 (0x0000000C) 将被读取为 201326592 (0x0C000000)。

希望这对您有所帮助。

关于python - 在 64 位系统上读取 32 位打包二进制数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/135246/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com