IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Python equivalent en C


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Etudiant
    Inscrit en
    Juin 2014
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2014
    Messages : 63
    Par défaut Python equivalent en C
    Bonjour,
    J'ai un programme python qu utilise la fonction pack du module struct. Et j'aimerais avoir son équivalent en langage C.
    Merci

  2. #2
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Par défaut
    Que fait cette fonction ? Quel est le contexte ? Peux-tu décrire le cas d'application ?

  3. #3
    Membre confirmé
    Homme Profil pro
    Etudiant
    Inscrit en
    Juin 2014
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2014
    Messages : 63
    Par défaut
    Bonjour,
    Merci pour ta réponse.
    Je ne connais pas trop python, mais elle à l'air d'être utilisé pour "formater" des chaines de caractères.
    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    x += pack("B",l & 0x7F)
    où l est un entier.
    A chaque fois qu'elle est utilisé, c'est pour des chaines de caractères.

  4. #4
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Si j'en crois la documentation (2.7 ou 3.6), struct permet la conversion string <-> octets.
    struct.pack(fmt, v1, v2, ...)
        Return a string containing the values v1, v2, ... packed according to the given format. The arguments must match the values required by the format exactly
    Ca ressemble terriblement à sprintf(output_buffer, "format", v1, v2, ...).

  5. #5
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Par défaut
    Ok, cette fonction produit une séquence d'octets qui peut être affectée à un enregistrement C défini avec l'arrangement correspondant. Il n'y a pas lieu d'y avoir d'équivalent puisque cette fonction est justement destinée à l'interopérabilité vers C. L'équivalent c'est une struct compatible avec le format décrit.

    Je pose donc à nouveau la question :

    Citation Envoyé par Matt_Houston Voir le message
    Peux-tu décrire le cas d'application ?

  6. #6
    Membre confirmé
    Homme Profil pro
    Etudiant
    Inscrit en
    Juin 2014
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2014
    Messages : 63
    Par défaut
    C'est pour envoyer des requêtes dans un certain protocole à un serveur

  7. #7
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Par défaut
    Certes mais dans quel cadre, comment ça se passe ? Que cherches-tu à faire en C qui nécessite cette opération ? Où est le programme C ? Où est le script Python ? Comment doivent-ils communiquer ?

  8. #8
    Membre confirmé
    Homme Profil pro
    Etudiant
    Inscrit en
    Juin 2014
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2014
    Messages : 63
    Par défaut
    Voilà le script python que j'aimerais traduire en C :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    TYPE_ENUM = 0
    TYPE_STRING = 2
    TYPE_BYTES = 2
    protocolVersion = 0
    source_id = "sender"
    destination_id = "receiver"
    server = "10.2.182.26"
    namespace = "urn:dial-multiscreen-org:service:dial:1"
    data = "{\"type\":\"GET CONNECTION\",\"origin\":{}}"
    lnData = getLenOf(data)
     
    socket = socket.socket()
    socket = ssl.wrap_socket(socket)
    socket.connect((server,1900))
     
    msg = pack(">BBBB%dsBB%dsBB%dsBBB%ds%ds" % (len(source_id),len(destination_id),len(namespace),len(lnData),len(data)),getType(1,TYPE_ENUM),protocolVersion,getType(2,TYPE_STRING),len(source_id),source_id,getType(3,TYPE_STRING),len(destination_id),destination_id,getType(4,TYPE_STRING),len(namespace),namespace,getType(5,TYPE_ENUM),0,getType(6,TYPE_BYTES),lnData,data)
     
    msg = pack(">I%ds" % (len(msg)),len(msg),msg)
     
    socket.write(msg)
    Et la fonction getLenOf :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    def getLenOf(s):
    	x = ""
    	l = len(s)
    	while(l > 0x7F):
    		x += pack("B",l & 0x7F | 0x80)
    		l >>= 7
    	x += pack("B",l & 0x7F)
    	return x

Discussions similaires

  1. Equivalent de "PAUSE" en Python ?
    Par Lenezir dans le forum Général Python
    Réponses: 12
    Dernier message: 16/08/2011, 11h05
  2. Equivalent sort -u unix en python
    Par AnsuzPeorth dans le forum Général Python
    Réponses: 7
    Dernier message: 13/03/2010, 18h37
  3. Réponses: 3
    Dernier message: 03/07/2009, 09h58
  4. [WxRuby] Equivalent python de CheckListCTRL
    Par Jeremy0201 dans le forum Ruby
    Réponses: 0
    Dernier message: 09/01/2009, 12h05
  5. Equivalent à sleep en python
    Par breakwall dans le forum Général Python
    Réponses: 3
    Dernier message: 09/10/2008, 15h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo