Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Mais aussi sur les technos front comme React, Angular, Typescript et Javascript en général.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

[ctypes] Comment remplacer c_char_p par POINTER(c_char) pour des données binaires

0 votes

Je dois passer des données à un programme en C par l'intermédiaire de la structure ci-après.

class ToxOptions(Structure):
_fields_ = [
    ('ipv6_enabled', c_bool),
    ('udp_enabled', c_bool),
    ('proxy_type', c_int),
    ('proxy_host', c_char_p),
    ('proxy_port', c_uint16),
    ('start_port', c_uint16),
    ('end_port', c_uint16),
    ('tcp_port', c_uint16),
    ('savedata_type', c_int),
    ('savedata_data', c_char_p),
    ('savedata_length', c_size_t)
]

Pour cela, j'utilise le bout de code suivant:

       # Load existing profil
        with open("tox.data", "rb") as f:
            self.__tox_data = f.read()
        __tox_options.contents.savedata_type = TOX_SAVEDATA_TYPE['TOX_SAVE']
        __tox_options.contents.savedata_data = c_char_p(self.__tox_data)
        __tox_options.contents.savedata_length = len(self.__tox_data)

Or, cela ne fonctionne pas car, comme expliqué dans la documentation, ccharp ne fonctionne qu'avec des chaînes de caractères se terminant par \0 et, justement, mes données binaires contiennent \0.

Je n'arrive pas à remplacer ccharp par POINTER(c_char) et ainsi passer self.__tox_data par référence au programme C.

demandé 12-Aou par Manu

Peux-tu fournir un exemple complet de fichier tox.data pour pouvoir tester ?

Votre réponse

Preview

Votre nom à afficher ( en option ):
Vie privée: . Votre adresse de messagerie ne sera utilisée que pour l'envoi de ces notifications .
Vérification anti -spam:
Pour éviter cette vérification à l'avenir, Connectez vous ou inscrivez vous.
...