14.14.2.7 基本データ型

class _SimpleCData
この非公開クラスはすべての基本ctypesデータ型のベースクラスです。 ここでこのクラスに触れたのは、基本ctypesデータ型の共通属性を含んでいるからです。 _SimpleCData_CDataのサブクラスですので、 そのメソッドと属性を継承しています。

インスタンスはただ一つの属性を持ちます:

value
この属性にはインスタンスの実際の値が入っています。それは 整数とポインタ型に対しては整数、文字型に対しては 一文字だけの文字列、文字ポインタ型に対しては Python文字列またはユニコード文字列です。

value属性をctypesインスタンスから取り出したとき、 たいていは新しいオブジェクトがその都度返されます。ctypesは 元のオブジェクトを戻すことはしません。常に新しいオブジェクトが 作られます。同じことはすべての他のctypesオブジェクトインスタンスに 対しても当てはまります。

基本データ型は、外部関数呼び出しの結果として返されたときや、 例えば構造体のフィールドメンバーや配列要素を取り出すときに、 ネイティブのPython型へ透過的に変換されます。言い換えると、 外部関数がc_char_prestypeを持つ場合は、 c_char_pインスタンスではなく常にPython文字列を 受け取ることでしょう。

基本データ型のサブクラスはこの振る舞いを継承しません。 したがって、外部関数のrestypec_void_pの サブクラスならば、関数呼び出しからこのサブクラスのインスタンスを 受け取ります。もちろん、value属性にアクセスしてポインタの値を 得ることができます。

これらが基本データ型です:

class c_byte
Cのsigned charデータ型を表し、小整数として値を解釈します。 コンストラクタはオプションの整数初期化子を受け取ります。 オーバーフローのチェックは行われません。

class c_char
C charデータ型を表し、単一の文字として値を解釈します。 コンストラクタはオプションの文字列初期化子を受け取り、 その文字列の長さちょうど一文字である必要があります。

class c_char_p
C char *データ型を表し、ゼロ終端文字列へのポインタで なければなりません。コンストラクタは整数のアドレスもしくは 文字列を受け取ります。

class c_double
C doubleデータ型を表します。コンストラクタはオプションの 浮動小数点数初期化子を受け取ります。

class c_float
C floatデータ型を表します。コンストラクタはオプションの 浮動小数点数初期化子を受け取ります。

class c_int
C signed intデータ型を表します。コンストラクタはオプションの 整数初期化子を受け取ります。オーバーフローのチェックは行われません。 sizeof(int) == sizeof(long)であるプラットホームでは、 c_longの別名です。

class c_int8
C 8-bit signed intデータ型を表します。たいていは、 c_byteの別名です。

class c_int16
C 16-bit signed intデータ型を表します。たいていは、 c_shortの別名です。

class c_int32
C 32-bit signed intデータ型を表します。たいていは、 c_intの別名です。

class c_int64
C 64-bit signed intデータ型を表します。たいていは、 c_longlongの別名です。

class c_long
C signed longデータ型を表します。コンストラクタはオプションの 整数初期化子を受け取ります。オーバーフローのチェックは行われません。

class c_longlong
C signed long longデータ型を表します。コンストラクタはオプションの 整数初期化子を受け取ります。オーバーフローのチェックは行われません。

class c_short
C signed shortデータ型を表します。コンストラクタはオプションの 整数初期化子を受け取ります。オーバーフローのチェックは行われません。

class c_size_t
C size_tデータ型を表します。

class c_ubyte
C unsigned charデータ型を表します。その値は小整数として 解釈されます。コンストラクタはオプションの整数初期化子を 受け取ります。オーバーフローのチェックは行われません。

class c_uint
C unsigned intデータ型を表します。コンストラクタはオプションの 整数初期化子を受け取ります。オーバーフローのチェックは行われません。 sizeof(int) == sizeof(long)であるプラットホームでは、 c_ulongの別名です。

class c_uint8
C 8-bit unsigned intデータ型を表します。たいていは、 c_ubyteの別名です。

class c_uint16
C 16-bit unsigned intデータ型を表します。たいていは、 c_ushortの別名です。

class c_uint32
C 32-bit unsigned intデータ型を表します。たいていは、 c_uintの別名です。

class c_uint64
C 64-bit unsigned intデータ型を表します。たいていは、 c_ulonglongの別名です。

class c_ulong
C unsigned longデータ型を表します。コンストラクタはオプションの 整数初期化子を受け取ります。オーバーフローのチェックは行われません。

class c_ulonglong
C unsigned long longデータ型を表します。コンストラクタは オプションの整数初期化子を受け取ります。オーバーフローのチェックは 行われません。

class c_ushort
C unsigned shortデータ型を表します。コンストラクタはオプションの 整数初期化子を受け取ります。オーバーフローのチェックは行われません。

class c_void_p
C void *データ型を表します。値は整数として表されます。 コンストラクタはオプションの整数初期化子を受け取ります。

class c_wchar
C wchar_tデータ型を表し、値はユニコード文字列の 単一の文字として解釈されます。コンストラクタはオプションの 文字列初期化子を受け取り、その文字列の長さはちょうど 一文字である必要があります。

class c_wchar_p
C wchar_t *データ型を表し、ゼロ終端ワイド文字列への ポインタでなければなりません。コンストラクタは整数のアドレス もしくは文字列を受け取ります。

class c_bool
C boolデータ型(より正確には、C99の_Bool)を表します。 その値はTrueまたはFalseであり、コンストラクタは どんなオブジェクト(真値を持ちます)でも受け取ります。 バージョン 2.6 で 新たに追加 された仕様です。

class HRESULT
Windows用: HRESULT値を表し、関数またはメソッド呼び出しに対する 成功またはエラーの情報を含んでいます。

class py_object
C PyObject *データ型を表します。引数なしでこれを呼び出すと NULL PyObject *ポインタを作成します。

ctypes.wintypesモジュールは他のWindows固有のデータ型を提供します。 例えば、HWNDWPARAMまたはDWORDです。 MSGRECTのような有用な構造体も定義されています。

ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。