作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一个模块来压缩要传递给 C 程序的位,但不断出现错误。经过一些测试,我发现 Blah 类的字段 a 无论如何都卡在 0。有谁知道这是错误还是我在这里做错了什么?
抱歉,我忘了说我正在使用来自 http://www.python.org/download/releases/3.1.2/ 的 python 3.1.2
>>> import ctypes
>>> class Blah(ctypes.Structure):
... _fields_ = [("a", ctypes.c_uint64, 64),
... ("b", ctypes.c_uint16, 16),
... ("c", ctypes.c_uint8, 8),
... ("d", ctypes.c_uint8, 8)]
...
>>> x = Blah(0xDEAD,0xBEEF,0x44,0x12)
>>> print (hex(x.a) )
0x0
>>> print (hex(x.b ))
0xbeef
>>> print (hex(x.c ))
0x44
>>> print (hex(x.d ))
0x12
>>>
>>> g = Blah(0x2BAD,0xBEEF,0x55,0x12)
>>> print (hex(g.a ))
0x0
>>> print (hex(g.b ))
0xbeef
>>> print (hex(g.c ))
0x55
>>> print (hex(g.d ))
0x12
>>>
交换前两个字段的位置得到相同的结果
>>> import ctypes
>>> class Blah(ctypes.Structure):
... _fields_ = [("a", ctypes.c_uint16, 16),
... ("b", ctypes.c_uint64, 64),
... ("c", ctypes.c_uint8, 8),
... ("d", ctypes.c_uint8, 8)]
...
>>> x = Blah(0xDEAD,0xBEEF,0x44,0x12)
>>> print (hex(x.a) )
0xdead
>>> print (hex(x.b ))
0x0
>>> print (hex(x.c ))
0x44
>>> print (hex(x.d ))
0x12
>>>
>>> g = Blah(0x2BAD,0xBEEF,0x55,0x12)
>>> print (hex(g.a ))
0x2bad
>>> print (hex(g.b ))
0x0
>>> print (hex(g.c ))
0x55
>>> print (hex(g.d ))
0x12
>>>
改变字段的大小,我观察到一些奇怪的输入截断
>>> import ctypes
>>> class Blah(ctypes.Structure):
... _fields_ = [("a", ctypes.c_uint64, 40),
... ("b", ctypes.c_uint64, 40),
... ("c", ctypes.c_uint8, 8),
... ("d", ctypes.c_uint8, 8)]
...
>>> x = Blah(0xDEAD,0xBEEF,0x44,0x12)
>>> print (hex(x.a) )
0xad
>>> print (hex(x.b ))
0xef
>>> print (hex(x.c ))
0x44
>>> print (hex(x.d ))
0x12
>>>
>>> g = Blah(0x2BAD,0xBEEF,0x55,0x12)
>>> print (hex(g.a ))
0xad
>>> print (hex(g.b ))
0xef
>>> print (hex(g.c ))
0x55
>>> print (hex(g.d ))
0x12
>>>
有人知道为什么会这样吗?
最佳答案
您可以省略第三个字段作为解决方法。
>>> import ctypes
>>> class Blah(ctypes.Structure):
... _fields_ = [("a", ctypes.c_uint64), ('b', ctypes.c_uint16), ('c', ctypes.c_uint8), ('d', ctypes.c_uint8)]
...
>>> x = Blah(0xDEAD,0xBEEF,0x44,0x12)
>>> hex(x.a)
'0xdead'
>>> hex(x.b)
'0xbeef'
我想剩下的就是一个错误。
关于Python 结构总是卡在 0,不管你给它赋什么值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3824617/
我是一名优秀的程序员,十分优秀!