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 :

Séquence d'octets en hexadecimal


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2019
    Messages : 2
    Par défaut Séquence d'octets en hexadecimal
    Bonjour, je souhaite envoyer une séquence d'octet en hexadécimal via un programme python vers un écran (communication UART).

    Ma séquence se présente donc sous la forme b'\xXX\xXX...' ou XX sont des valeurs en hexadécimal

    Ce programme me sert à afficher un numéro sur l'écran puis en appuyant sur un bouton afficher le numéro suivant.

    Mon problème est que par exemple sur la séquence b'\xAA\xAA\x00\x4E\xAA'. ou AA sont des octets définissant certains paramètres fixes, je ne trouve pas de moyen de modifier la valeur 00 et 4E. J'ai essayer en essayant de faire un compteur puis en utilisant la fonction hex() puis via une chaîne de caractère de remplace le 0 en \ mais l'antislash sur python est un problème. De plus, l'instruction format ne marche pas à cause du format qui ne marche pas avec des octets et quand je convertit avec str() la chaîne de caractères est différentes de la séquence souhaitée.

    Merci de vos réponses.

  2. #2
    Membre chevronné
    Homme Profil pro
    BTS SN IR
    Inscrit en
    Mai 2017
    Messages
    514
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : BTS SN IR

    Informations forums :
    Inscription : Mai 2017
    Messages : 514
    Par défaut
    je ne suis pas sur d'avoir compris où était le problème, est-ce que ceci pourrait vous décoincer ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    string = b'\xAA\xAA\x00\x4E\xAA'.hex()
    bytes_list = [string[i:i+2] for i in range(0, len(string), 2)]
    print(bytes_list) # ['aa', 'aa', '00', '4e', 'aa']

  3. #3
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Salut,

    Avec Python, les bytes sont non mutables comme les str(ings).
    Vous pouvez les modifiez comme les str(ings) en passant par une liste, puis en contruisant la nouvelle chaine via .join ou les transformer en bytearray (qui sont des bytes mutables).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #4
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2019
    Messages : 2
    Par défaut
    Citation Envoyé par flapili Voir le message
    je ne suis pas sur d'avoir compris où était le problème, est-ce que ceci pourrait vous décoincer ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    string = b'\xAA\xAA\x00\x4E\xAA'.hex()
    bytes_list = [string[i:i+2] for i in range(0, len(string), 2)]
    print(bytes_list) # ['aa', 'aa', '00', '4e', 'aa']
    Et après comment faire pour reformer des octets sous la forme b'\xAA\xAA\x00\x4E\xAA'?

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Citation Envoyé par valdss Voir le message
    Et après comment faire pour reformer des octets sous la forme b'\xAA\xAA\x00\x4E\xAA'?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    >>> s = b'1234'
    >>> L = list(s)
    >>> L
    [49, 50, 51, 52]
    >>> L[2] = ord('X')
    >>> bytes(L)
    b'12X4'
    >>>
    ou bien:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >> z = bytearray(s)
    >>> z
    bytearray(b'1234')
    >>> z[1] = ord('X')
    >>> z
    bytearray(b'1X34')
    >>>
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. Extraire une séquence d'octets d'un fichier
    Par benito9253 dans le forum Windows Forms
    Réponses: 0
    Dernier message: 23/12/2009, 22h26
  2. conversion mot de 4 octets hexadecimal en decimal
    Par adelsunwind dans le forum VBA Access
    Réponses: 7
    Dernier message: 03/03/2009, 22h47
  3. Convertir une AnsiString en hexadecimal
    Par manathan01 dans le forum C++Builder
    Réponses: 3
    Dernier message: 26/12/2002, 09h27
  4. Existe-t'il un type tenant sur 2 octets ?
    Par benj63 dans le forum C++Builder
    Réponses: 13
    Dernier message: 20/06/2002, 17h03

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