在ctypes结构中分配数组元素

2w2cym1i  于 2021-08-25  发布在  Java
关注(0)|答案(1)|浏览(397)

在数组中指定数组元素的惯用方法是什么 ctypes.Structure ? 例如,假设:

from ctypes import Structure, c_float

class Foo(Structure):
    _fields_ = (
        ('arr', c_float*3),
    )

values = [1.1, 2.2, 3.3]

我希望能够做到:

foo = Foo()
foo.arr = values

但这抱怨类型不匹配。
typeerror:应为c_float_array_3示例,获取列表
我正在添加一个答案,说明我的观点,但我有兴趣知道任何更明确的答案。

busg9geu

busg9geu1#

我采用的解决方案是:

foo.arr = type(foo.arr)(*values)

而更详细的选项是:

for i, v in enumerate(values):
  foo.arr[i] = v

请注意,这两个选项都允许 values 更短(即0到3个元素),缺少的条目用零填充。如果值包含的条目过多,将引发错误。这与c中的数组初始化是一致的,这恰好是我希望代码执行的操作,但对于其他情况可能过于宽松。

相关问题