+ -
当前位置:首页 → 问答吧 → python 在64位系统和32位系统数据类型的大小不同问题。

python 在64位系统和32位系统数据类型的大小不同问题。

时间:2010-11-16

来源:互联网

一段代码,读二进制文件,转换到数据结构,在32位下正常,在64位下报错,想来应该是64位数据类型
大小的问题。

代码大概如下:

 Format = 'lllllfll'
 f = open('test.dat','rb')
 data = f.read(32)
 s=[]
 s.append(struct.unpack(Format,data))

 最后一句32位下正常,64位下报:“struct.error: unpack requires a string argument of length 64”
 改成
 data = f.read(64)
 仍然是这个错。

 请问:
 1 如何获得 lllllfll 的正确长度?
 2 正确长度是?

刚接触python,就被要求移植32位代码。谢指点。

作者: r3000   发布时间: 2010-11-16

一、把l换成i试试。
二、你是什么操作系统?小心换到别的OS上又完蛋了。

作者: iambic   发布时间: 2010-11-16

又在测了一下,很奇怪。
代码原来的运行环境是windows 7 32位,目标是 FreeBSD 64位。
在python的命令行模式下 ,一句句执行, 改为 data = f.read(64)
就正确了,但执行.py 文件就打印struct.error: unpack requires a string argument of length 64
删掉了pyc文件

作者: r3000   发布时间: 2010-11-16

按2楼说的,换成i 就好了。道理是 64位下的int 相当于32位下的 long? 

作者: r3000   发布时间: 2010-11-16

和操作系统也有关系。同样是64位的操作系统,Windows和UNIX行为可能不太一样。UNIX上的long可能是64位,Windows可能就是32位。自己多试试,就有经验了。我用的不多,很多时候也记不清楚。

作者: iambic   发布时间: 2010-11-16