Python 无法定义64位以上的Ctypes结构位字段。还有别的选择吗?

Python 无法定义64位以上的Ctypes结构位字段。还有别的选择吗?,python,ctypes,Python,Ctypes,我试图创建一个Ctypes结构来解析一些原始字节数组,但我的一些字段长度超过64位 我想不出任何方法来定义更大的位字段 类MySpecialStructure(结构): _字段=[ (“a”,c_uint,32岁), (“b”,c_uint,96), (“c”,c_uint,96), (“d”,c_uint,32岁), (“e”,c_uint,384) ] 这给了我:“ValueError:位字段无效的位数” 有什么可以替代Ctypes的方法吗?有没有办法定义64位以上的位字段?位字段通常用于

我试图创建一个Ctypes结构来解析一些原始字节数组,但我的一些字段长度超过64位

我想不出任何方法来定义更大的位字段

类MySpecialStructure(结构):
_字段=[
(“a”,c_uint,32岁),
(“b”,c_uint,96),
(“c”,c_uint,96),
(“d”,c_uint,32岁),
(“e”,c_uint,384)
]
这给了我:“ValueError:位字段无效的位数”


有什么可以替代Ctypes的方法吗?有没有办法定义64位以上的位字段?

位字段通常用于表示已知固定位宽度的整数类型。您可以使用类似模块的功能来完成所需的操作。@martineau这些字段都是已知的固定位宽度,因此位字段如果可以扩展到64位以上,将非常有用。对于使用位数组,您会建议为每个字段创建多个位数组,还是创建一个大位数组?是的,但字段不对应任何标准的C整数位宽度,这就是模块不支持它们的原因。@martineau很抱歉为一个稍微相关的问题打扰您,但有人建议我对大于64位的任何字段使用c_uint32数组。这可以用Ctypes完成吗?如果是,怎么做?因为所有字段都是32位的倍数,最简单的方法可能是对所有字段使用一个
bitarray
,然后手动将其转换为它们表示的五个字段。据我所知,这些字段是无符号整数,因此使用
c\u uint
s数组是合适的。Python整数是可变长度的,可以有任意数量的位,因此可以(而且相当容易)将
bitarray
元素转换为5个Python整数。位字段通常用于表示已知固定位宽度的整数类型。您可以使用类似模块的功能来完成所需的操作。@martineau这些字段都是已知的固定位宽度,因此位字段如果可以扩展到64位以上,将非常有用。对于使用位数组,您会建议为每个字段创建多个位数组,还是创建一个大位数组?是的,但字段不对应任何标准的C整数位宽度,这就是模块不支持它们的原因。@martineau很抱歉为一个稍微相关的问题打扰您,但有人建议我对大于64位的任何字段使用c_uint32数组。这可以用Ctypes完成吗?如果是,怎么做?因为所有字段都是32位的倍数,最简单的方法可能是对所有字段使用一个
bitarray
,然后手动将其转换为它们表示的五个字段。据我所知,这些字段是无符号整数,因此使用
c\u uint
s数组是合适的。Python整数是可变长度的,可以有任意数量的位,因此应该可以(而且相当容易)将
bitarray
元素转换为5个Python整数。