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

Python Discussion :

ic ne vaut pas ci


Sujet :

Python

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 10
    Par défaut ic ne vaut pas ci
    Bonjour,

    En utilisant le module struct je me suis rendu compte de la chose suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    >>> calcsize ('i')
    4
    >>> calcsize ('si')
    8
    >>> calcsize ('ci')
    8
    >>> calcsize ('1ci')
    8
    >>> calcsize ('ic')
    5
    >>> calcsize ('!ci')
    5
    Le truc c'est que je suis sur une architecture little endian (x86) et que je veux récupérer les valeurs d'une chaine de 24 bytes formatée suivant 6sicci8s (sachant que je croyais jusqu'à ce jour que c ou 1s vaut un byte).
    Quelqu'un a une idée ?
    Merci
    taprik

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 119
    Par défaut
    Ca s'appelle de l'alignement. Lorsqu'il n'y a pas de modificateur (!@=<>), struct utilise le meme alignement que le langage C, et les valeurs seront placées de façon à permettre au processeur de les récupérer en un coup. Donc il rajoute des 0 apres le byte pour que l'int commence à un multiple de 4.
    http://fr.wikipedia.org/wiki/Alignement_de_donn%C3%A9es

    Il suffit de mettre < pour se placer en little-endian, du coup l'alignement n'est pas pris en compte ("standard") et on a:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    >>> calcsize('<6sicci8s')
    24

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 10
    Par défaut
    Merci Fructidor,

    ça explique tout

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

Discussions similaires

  1. Réponses: 20
    Dernier message: 08/04/2015, 14h05
  2. [AJAX] xhr.status vaut 0 et pas 200
    Par sebatlante dans le forum AJAX
    Réponses: 1
    Dernier message: 22/04/2010, 09h36
  3. Programmer encore en VB 6 c'est pas bien ? Pourquoi ?
    Par Nektanebos dans le forum Débats sur le développement - Le Best Of
    Réponses: 85
    Dernier message: 10/03/2009, 14h43
  4. Pas de fork sous Windows?
    Par chezjm dans le forum POSIX
    Réponses: 8
    Dernier message: 11/06/2002, 12h15

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