我已经创建了一个ctype位域结构和相应的联合体,以通过单个位域和整数值来访问它。 我能够使用包含字段名称的变量来设置单个字段,但现在我想知道特定字段属于哪个字节。 这里是我的代码示例:Python ctype-bitfields:获取位域位置
import ctypes
c_short = ctypes.c_uint16
class Flags_bits(ctypes.LittleEndianStructure):
_fields_ = [
("bitField1", c_short, 1),
("bitField2", c_short, 4),
("bitField3", c_short, 6),
("bitField4", c_short, 1),
("bitField5", c_short, 2),
("bitField6", c_short, 2),
("bitField7", c_short, 6),
("bitField8", c_short, 4),
("bitField9", c_short, 4),
("bitField10", c_short, 1),
("bitField11", c_short, 1)]
class Flags(ctypes.Union):
_fields_ = [("b", Flags_bits),
("asInt", c_short*6)]
def setFlag (flagName, value):
flags = Flags()
setattr(flags.b, flagName, value)
print getattr(flags.b, flagName)
现在我想知道的是哪个整数我旗属于(即其flags.asInt [1]),我一直在寻找一种“ get_location“属性来获取结构中的标志位置,并从中检索整数的”i“索引,但找不到任何东西 有没有简单的方法来做到这一点?
在此先感谢您的回复!
谢谢,这有很大帮助!但是在我的机器上(我在Window机器上运行Python 2.7.2),为了不接受投诉,我必须用“_,_”来更改“* _”。但仍然很好的答案。 – toti08
@eryksun:谢谢你的回答!你能告诉我,这个关于位域大小和偏移的东西可以在文档中找到吗?我无法在那里找到它... – maggie
@maggie,文档简要提到了字段描述符类型,但属性没有记录。这只是离开源码,如['PyCField_repr'](https://hg.python.org/cpython/file/648dcafa7e5f/Modules/_ctypes/cfield.c#l271)。 – eryksun