以下代码在我的脚本中行为不正确:
from ctypes import *
base_addr = c_uint64(0)
base_addr_temp = c_uint64(0)
print base_addr
print base_addr_temp
if(base_addr == base_addr_temp):
print "val"
我得到的输出:
c_ulong(0L)
c_ulong(0L)
我正在使用 python 2.7.3 版本。
以下代码在我的脚本中行为不正确:
from ctypes import *
base_addr = c_uint64(0)
base_addr_temp = c_uint64(0)
print base_addr
print base_addr_temp
if(base_addr == base_addr_temp):
print "val"
我得到的输出:
c_ulong(0L)
c_ulong(0L)
我正在使用 python 2.7.3 版本。
我认为因为这些是对象,所以您必须按值比较它们:
base_addr.value == base_addr_temp.value
自从我完成任何 Python 以来已经有一段时间了,但是在许多语言中,只有当两个对象实际上引用同一个对象(即引用内存中的相同位置)时,它们才被认为是“相等的”。
您的比较是在两个对象的地址之间(“base_addr”和“base_addr_temp”),而不是在两个对象的值之间(都是 0L)
Weirdly, on windows 2.7.3 base_addr.str() returns 'c_ulonglong(0L)' which is different from what you saw -- but that doesn't change the fact that you were comparing data locations rather than values.