Python ctypes变量内容问题

2 投票
1 回答
636 浏览
提问于 2025-04-17 08:26

我正在使用以下的DLL函数

int ReadMemU32(long address , long *pdata)

我用ctypes byref这样来调用它:

read_data =  c_ulong(0)
result = ReadMemU32(address, byref(read_data))

当我检查它的值时,我注意到这个:

>>> read_data
c_ulong(55L)
>>> read_data == 55
False
>>> read_data == c_ulong(55L)
False

为什么它是假的?

如果我改成这样做:

# my_memory is of type Class(Structure) with c_ulong field names read_data
my_memory.read_data = read_data

然后检查结果:

>>> my_memory.read_data 
55L
>>> my_memory.read_data == 55
True

这有什么不同吗?

1 个回答

3

对于你的代码,只需要使用:

read_data.value == 55

这样做的原因是:

>>> read_data == c_ulong(55L)
False

出现这种情况是因为ctyps没有为C对象实现正确的Python比较方式——它只是检查对象是否是同一个,默认就是这样。不过,如果你比较每个对象的“.value”属性,那就没问题了。

撰写回答