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 :

Problèmes pour concaténer des bytes


Sujet :

Python

  1. #1
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2015
    Messages : 44
    Par défaut Problèmes pour concaténer des bytes
    Bonjour,

    Je tente désespérément de concaténer 2 bytes car mes données sont sur 2 octets:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    f = open("fichier.bin", "rb")
    y= []
    x=[]
    b = f.read()
    Si je fais je vais avoir ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    b'\x101\xff\xfb\x104\xff\xfa'
    .
    Comment faire pour concaténer les valeurs deux à deux?
    J'ai tenté de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    data= bytes(b[0]) + bytes(b[1])
    et j'ai obtenu ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
    Je suis perdue du coup.
    J'ai aussi lu sur la doc python qu'on pouvait utiliser .join, mais je ne sais pas trop comment l'appliquer dans mon cas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    data='b'.join( (str(bytes(b[0])),str(bytes(b[1]))) )
    Ce qui me donne après un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'bb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 715
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 715
    Par défaut
    Salut,

    Plutôt que concaténer 2 bytes vous pouvez découper en paquets de 2:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    >>> s = b'\x101\xff\xfb\x104\xff\xfa'
    >>> i = 0
    >>> s[i:i+2]
    b'\x101'
    >>> i = 2
    >>> s[i:i+2]
    b'\xff\xfb'
    >>>
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2015
    Messages : 44
    Par défaut
    Merci

  4. #4
    Membre chevronné
    Homme Profil pro
    Développeur banc de test
    Inscrit en
    Mai 2014
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur banc de test
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2014
    Messages : 199
    Par défaut
    Citation Envoyé par Shokola Voir le message
    J'ai tenté de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    data= bytes(b[0]) + bytes(b[1])
    et j'ai obtenu ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
    Je suis perdue du coup. ]
    Juste en complément, la fonction bytes() est assez perverse à la différence de str().

    Avec [C]str(x)[/BC, si x est un caractère ou chaîne de caractère/string ça retournera toujours du type string.

    Alors que l'argument bytes() permet soit :

    De convertir un itérable en byte, liste/bytes/str...

    bytes(b'\x00\x01') vaudra bien b'\x00\x01'

    Soit si l'argument est un entier d'initialiser le nombre de bytes :

    bytes() ou bytes(0) donnant b''
    et bytes(n) donnant n * b'\x00'

    bytes(5) ne donnera pas b'\x05' mais b'\x00\x00\x00\x00\x00'

    Et c'est là que survient l'erreur, si on ne prend qu'un seul élément bytes (itération), ce n'est pas un élément de type bytes mais un entier représentant sa valeur d'un octet non signé.

    Ainsi msg = b'\x05\x00'msg[0] vaudra 5

    Il faut donc faire gaffe avec la conversion bytes, soit en testant auparavant le type soit par méthode de slicing afin de conserver de type bytes :

    msg[0: 0 + 1] vaudra b'\x05'

    Dans cet exemple ça parait simple mais dans le cas d'un structure ctypes par exemple pour convertir en bytes une structure il suffit d'utiliser bytes(structure), de même pour l'élément si c'est une sous-structure, sauf que si par erreur on convertit un élément qui est un type retournant un entier et non une structure, on en saura rien, le test passera sans problème de typage et la conversion ne sera pas celle attendue.

  5. #5
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2015
    Messages : 44
    Par défaut
    Merci YCL-1 pour cette information complémentaire

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

Discussions similaires

  1. Problème pour concaténer des signaux
    Par Math66 dans le forum Signal
    Réponses: 3
    Dernier message: 31/05/2007, 15h12
  2. Problème de syntaxe pour concaténer des variables
    Par renaud26 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 05/09/2006, 09h44
  3. [XML word] problème pour créer des puces
    Par ratapapa dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 21/07/2005, 13h52
  4. Problème pour Télécharger des fichiers
    Par joce3000 dans le forum C++Builder
    Réponses: 8
    Dernier message: 21/01/2005, 10h30
  5. problème pour faire des blocs
    Par tinkye_winkye dans le forum Mise en page CSS
    Réponses: 6
    Dernier message: 04/01/2005, 14h13

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