Python ctypes结构的位对齐

Python ctypes结构的位对齐,python,bit-fields,Python,Bit Fields,我正在努力用python编写一个工作的ctypes位字段类来解析我的位字段 从ctypes导入c_uint8、c_float、c_uint16、c_int、指针、强制转换、LittleEndianStructure 类MyBitField(LittleEndianStructure): _字段=[ ('foo',c_uint8,4), ('bar',c_uint8,4), ('baz',c_uint16,10), ('bee',c_uint8,4), ('boo',c_uint16,10), ]

我正在努力用python编写一个工作的
ctypes
位字段类来解析我的位字段

从ctypes导入c_uint8、c_float、c_uint16、c_int、指针、强制转换、LittleEndianStructure
类MyBitField(LittleEndianStructure):
_字段=[
('foo',c_uint8,4),
('bar',c_uint8,4),
('baz',c_uint16,10),
('bee',c_uint8,4),
('boo',c_uint16,10),
]
测试=整数('100000011111100100110',2)
test_convert=cast((c_int*1)(test),指针(MyBitField))。内容
打印(test_convert.foo)
打印(测试转换条)
打印(test_convert.baz)
打印(test_convert.bee)
打印(test_convert.boo)
产生

6
2
32
0
0

所以
foo
bar
与预期一样,但是
baz
应该是第8位到第18位,所以
0B000011111
,在我看来应该是
63
而不是
32
bee
然后应该是
0b1000
,所以
8
,而不是0。我不明白ctypes解释比特背后的逻辑。如果有人能够精心设计,甚至能够生成生成所需输出的代码,那就太好了。

63,而不是62。顺便说一句,Python允许下划线的可读性,因此可以编写
'0000000000\u 1000\u 000011111\u 0010\u 0110'