Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3
  1. #1
    Invité de passage
    Inscrit en
    mai 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : mai 2008
    Messages : 5
    Points : 4
    Points
    4

    Par défaut methode unpack de la classe struct

    Bonjour à tous,

    Voila, pour un projet de mon école, je suis entrain développé un soft pour un modem. Je code ce soft en Python, car le modem a un interpreteur Python intégré. Par contre, il n'a pas tous les modules de Python intégré. Malheureusement, dans mon developpement, je dois utiliser la methode unpack du module Struct qui n'est pas intégré dans mon modem.
    En fait je récupère d'abord des données via un serveur ntp (que j'appelle data). Ensuite pour avoir accès aux informations utiles, je dois faire :
    donnees_utiles = struct.unpack('!12I', data)
    Etant donné que je ne peux pas utiliser la methode unpack dans modem, j'aimerai savoir si quelqu'un peux m'aider à trouver une autre manière d'extraire les données? J'ai recherché la définition de la méthode dans les Librairies mais j'ai rien trouvé. J'ai essayé de bidouiller un code en me basant sur le help de la méthode, mais mon extraction est erroné.
    Merci d'avance pour vos différentes aides

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    mars 2007
    Messages
    895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : mars 2007
    Messages : 895
    Points : 1 300
    Points
    1 300

    Par défaut

    Bonsoir,

    Est-ce que le module array est disponible ?
    Si oui, tu peux essayer ceci:
    Code :
    1
    2
    3
    import array
    donnees_utiles = array.array('I', data)
    donnees_utiles.byteswap()
    La dernière ligne n'est nécessaire que si l'architecture est little-endian.

    Il y aurait aussi moyen avec ctypes, mais si déjà struct n'est pas disponible, il y a peu de chance que ctypes le soit...

    Sinon à la main:
    Code :
    donnees_utiles = [(ord(data[i])<<24) + (ord(data[i+1])<<16) + (ord(data[i+2])<<8) + ord(data[i+3]) for i in range(0, 4*12, 4)]

  3. #3
    Invité de passage
    Inscrit en
    mai 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : mai 2008
    Messages : 5
    Points : 4
    Points
    4

    Par défaut

    Merci beaucoup dividee,

    Le module array n'étant pas également disponible, j'ai finalement opté pour ta solution "à la main" et ça marche!!
    Enorme merci à toi Dividee pour cette aide.

+ Répondre à la discussion
Cette discussion est résolue.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •