2011-12-15 19 views
2
私はこのような BYREF のctypesでそれを使用してい

Pythonは変数の内容問題

int ReadMemU32(long address , long *pdata) 

次のDLL関数を使用しています

ctypesは:

>>> 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 

違いは何ですか?あなたのコードの場合

答えて

3

、ちょうど使用:

read_data.value == 55 

なぜ動機:ctypsはCのオブジェクトのための適切なPythonの比較を実装していないため

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

がされて起こる - それはオブジェクト識別のためのテストとして、デフォルトです。しかし、各オブジェクトの ".value"プロパティを比較すると、うまくいきます。

+0

なぜc_ulongフィールドを持つ構造体への代入が異なるのでしょうか? –

+2

Ctypes構造体クラスのacessingプロパティは、フィールドの値をPythonの数値オブジェクトに強制的に変換するので、上記の例ではrepr(my_memory.read_data)をrepr(read_data)にco9mparedとして出力するだけです。 – jsbueno