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

康斯坦汀 2010-11-16 02:56:30
一段代码,读二进制文件,转换到数据结构,在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位代码。谢指点。

...全文
412 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
iambic 2010-11-16
  • 打赏
  • 举报
回复
和操作系统也有关系。同样是64位的操作系统,Windows和UNIX行为可能不太一样。UNIX上的long可能是64位,Windows可能就是32位。自己多试试,就有经验了。我用的不多,很多时候也记不清楚。
康斯坦汀 2010-11-16
  • 打赏
  • 举报
回复
按2楼说的,换成i 就好了。道理是 64位下的int 相当于32位下的 long?
康斯坦汀 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文件
iambic 2010-11-16
  • 打赏
  • 举报
回复
一、把l换成i试试。
二、你是什么操作系统?小心换到别的OS上又完蛋了。

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧