Ctypes

Un article de Haypo.

(Différences entre les versions)
Version du 19 février 2008 à 22:33 (modifier)
Haypo (Discuter | Contributions)
(Pour définir une structure)
← Différence précédente
Version du 19 février 2008 à 22:37 (modifier) (défaire)
Haypo (Discuter | Contributions)
(Tableau d'octet)
Différence suivante →
Ligne 37 : Ligne 37 :
== Tableau d'octet == == Tableau d'octet ==
 +'''create_string_buffer(str)''' crée un tableau d'octets pouvant contenir des octets nuls :
from ctypes import create_string_buffer from ctypes import create_string_buffer
python_string = "string with \0 byte" python_string = "string with \0 byte"
c_string = create_string_buffer(python_string) c_string = create_string_buffer(python_string)
- assert c_string.value == 'string with'+ assert c_string.value == 'string with '
assert c_string.raw == python_string assert c_string.raw == python_string
 +
 +'''create_string_buffer(int)''' crée un tampon de N octet pouvant contenir de octets nuls :
 + >>> from ctypes import create_string_buffer
 + >>> buffer = create_string_buffer(5)
 + >>> buffer.raw
 +'\x00\x00\x00\x00\x00'
 +
 +'''c_char_p''' tronque au premier octet nul :
 + from ctypes import create_string_buffer
 + python_string = "string with \0 byte"
 + c_string = c_char_p(python_string)
 + assert c_string.value == 'string with '
== Modules == == Modules ==

Version du 19 février 2008 à 22:37

Retour à la page précédente Retour aux langages de programmation

ctypes est une bibliothèque Python permettant d'accéder aux fonctions et symboles d'une bibliothèque externe (en particulier, codée en C).

Sommaire

Hello World!

$ python
>>> libc=cdll.LoadLibrary('libc.so.6')
>>> libc.printf("Hello World!\n")
Hello World!
13

Pour définir une structure

from ctypes import Structure, Union

class user_regs_struct(Structure):
   _fields_ = (
      ("ebx", c_ulong),
      ("ecx", c_ulong),
      ("edx", c_ulong),
      ("esi", c_ulong),
      ...
   )

_sifields_t = (...)
class siginfo(Structure):
   _fields_ = (
        ("si_signo", c_int),
        ("si_errno", c_int),
        ("si_code", c_int),
        ("_sifields", _sifields_t)
   )
   _anonymous_ = ("_sifields",)

Tableau d'octet

create_string_buffer(str) crée un tableau d'octets pouvant contenir des octets nuls :

from ctypes import create_string_buffer
python_string = "string with \0 byte"
c_string = create_string_buffer(python_string)
assert c_string.value == 'string with '
assert c_string.raw == python_string

create_string_buffer(int) crée un tampon de N octet pouvant contenir de octets nuls :

>>> from ctypes import create_string_buffer
>>> buffer = create_string_buffer(5)
>>> buffer.raw

'\x00\x00\x00\x00\x00'

c_char_p tronque au premier octet nul :

from ctypes import create_string_buffer
python_string = "string with \0 byte"
c_string = c_char_p(python_string)
assert c_string.value == 'string with '

Modules

Outils connexes :

Articles connexes