【发布时间】:2018-07-20 13:38:23
【问题描述】:
我在玩一些 ctype 结构,发现了一些有趣的东西,让我对我的实现感到疑惑。 MWE如下:
from ctypes import *
import numpy as np
class test_bitfield(Structure):
_fields_ = [("x", c_uint16, 9),
("y", c_uint8, 5),
("z", c_uint16, 4)]
bf = test_bitfield(np.uint64(9), np.uint64(9), np.uint64(9))
print(bf.x, ", ", bf.y, ", ", bf.z)
谁的输出是:
9, 0 ,9
这出乎我的意料。
通过将bf.y 转换为c_uint16,我得到了我从一开始就期望得到的结果:9, 9, 9。
看了一眼文档,我看到bitfields are only possible for integer fields,它并没有真正指定不支持c_uint8。然后我参考了可用的tests,我发现其中没有包含c_uint8 或c_char。但是,尝试使用 c_char 会引发 TypeError,而 c_uint8 不会引发。
有人可以澄清发生了什么吗? uint_8 没有实现位字段吗?还是我只是用错了?任何类型的澄清都非常感谢!
提前致谢!
【问题讨论】:
-
c_uint8 应该是一个整数字段,这是什么版本的python,在什么架构上运行......以及什么解释器(可能对FFI的东西很重要)
-
好吧..我猜它没有
标签: python ctypes bit-fields