gpt4 book ai didi

Python 结构总是卡在 0,不管你给它赋什么值?

转载 作者:行者123 更新时间:2023-11-28 18:55:14 24 4
gpt4 key购买 nike

我正在编写一个模块来压缩要传递给 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/

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