2

次のコードは、私のスクリプトで正しく動作していません。

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)

私はPython2.7.3バージョンを使用しています。

4

2 に答える 2

5

これらはオブジェクトであるため、値で比較する必要があると思います。

base_addr.value == base_addr_temp.value

Python をやったのは久しぶりですが、多くの言語では、2 つのオブジェクトが実際に同じオブジェクトを参照している (つまり、メモリ内の同じ場所を参照している) 場合にのみ、それらは「等しい」と見なされます。

于 2012-12-07T06:04:19.550 に答える
2

比較は、2つのオブジェクト(「base_addr」と「base_addr_temp」)のアドレス間で行われ、2つのオブジェクトの値(両方とも0L)間では行われません。

奇妙なことに、Windows2.7.3base_addrでは。str()は'c_ulonglong(0L)'を返しますが、これは表示されたものとは異なりますが、値ではなくデータの場所を比較していたという事実は変わりません。

于 2012-12-07T06:09:47.380 に答える