Précédent   Forum du club des développeurs et IT Pro > Autres langages > Python & Zope
Python & Zope Forum d'entraide sur la programmation en Python et Zope. Avant de poster -> F.A.Q Python
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 03/12/2012, 20h42   #1
gnibailau
Invité de passage
 
Inscription : mai 2008
Messages : 3
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 3
Points : 2
Points : 2
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
gnibailau est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/12/2012, 22h31   #2
dividee
Membre Expert
 
Homme
Inscription : mars 2007
Messages : 852
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Belgique

Informations forums :
Inscription : mars 2007
Messages : 852
Points : 1 184
Points : 1 184
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)]
dividee est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/12/2012, 23h07   #3
gnibailau
Invité de passage
 
Inscription : mai 2008
Messages : 3
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 3
Points : 2
Points : 2
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.
gnibailau est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 04h54.


 
 
 
 
Partenaires

Hébergement Web