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ème à l’affichage d'octets signé/non-signé [Python 3.X]


Sujet :

Python

  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

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

    Informations forums :
    Inscription : Mai 2018
    Messages : 73
    Par défaut Problème à l’affichage d'octets signé/non-signé
    Bonjour,

    J'ai un problème bizarre! j'ai fais un code python Client/Serveur avec Bluetooth en série, pour envoyer et recevoir des trames d'octets (par exemple: [0x73, 0x87, 0x02 .... ]) Tout marche, l'envoi réception marche très bien ! mais le problème c'est à l'affichage de mes trames, j'ai remarqué que les octets de 0 à 127 sont bien affichés, mais a partir de 128, il affiche l'octet mais il rajoute un C2 (194) derrière, par exemple: [0x73, 0x7F, 0x87, 0x02, 0x80 .... ] == [115, 127, 135, 2, 128 .... ] à l'affichage hexadécimal j'aurais 73 7F C2 87 2 C2 80 , on remarquera donc qu'il rajoute l'octet C2 venu de nul part ! je pense que vu que c'est à partir de 128 ! que c'est du à un problème de signé(-128 à 127)/non-signé (0 à 255).

    Des indications sur ce problème?

    Je vous remercie

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

    Citation Envoyé par Elinux Voir le message
    Des indications sur ce problème?
    Un peu de code montrant comment vous affichez çà?

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

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

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

    Informations forums :
    Inscription : Mai 2018
    Messages : 73
    Par défaut
    Voici le programme client:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    #!/usr/bin/env python
    # -*- coding: UTF-8 -*-
     
    import bluetooth
    import socket
    import time
    #from random import randint
     
    bd_addr = "20:16:03:09:3A:E6" 
     
    port = 12
    t=10
    sock=bluetooth.BluetoothSocket( bluetooth.RFCOMM )
     
    sock.connect((bd_addr, port))
     
    trame_envoi_1= [127, 126, 128, 7, 0, 33, 0, 36, 1, 127, 229, 45]
     
    def c():
        sock.settimeout(t)
        while 1:
            print('debut')
            try:
     
                for i in trame_envoi_1:
                    sock.send(chr(i))
                    print(hex(i))
     
                print('Trame_recue = ',trame_recue)
                print (trame_recue[3])
     
            except:
                print('attend une trame')
     
                break
    c()
    Pour le programme serveur, j'utilise un terminal pour lire ce qui est envoyé au COM12: voici la lecture : on peut voir le C2 et il y'a aussi un C3 quand le chiffre dépasse 191 donc a partir de 192 y'a un C3 qui se rajoute et modifie l'octet
    Images attachées Images attachées  

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

    Si vous êtes sous Python3, sock.send(chr(i)) devrait gueuler car chr(i) est un "str" alors que vous expédiez des "bytes". Et s'il ne râle pas, c'est qu'il le transforme en utf-8:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> trame= [127, 126, 128, 7, 0, 33, 0, 36, 1, 127, 229, 45]
    >>> s = ''.join(chr(ch) for ch in trame)
    >>> print (s.encode("utf-8"))
    b'\x7f~\xc2\x80\x07\x00!\x00$\x01\x7f\xc3\xa5-'
    >>>
    Essayez plutôt d'expédier vos bytes d'un seul coup: sock.send(bytes(trame)).

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

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

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

    Informations forums :
    Inscription : Mai 2018
    Messages : 73
    Par défaut
    J'ai compris ce que vous avez dit, j'ai meme fait le test, mais après avoir mis bytes à la place de chr, ben l'affichage est une centaine de 0 , voici la ligne que j'ai changé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for i in trame_envoi_1:
                    sock.send(bytes(i))
                    print(hex(i))
    L'affichage:
    Images attachées Images attachées  

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

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

    Informations forums :
    Inscription : Mai 2018
    Messages : 73
    Par défaut
    Ça marche ... ! j'ai enlevé la boucle for et j'ai juste envoyer tout le paquet (trame) comme vous l'avez dit, je vous remercie

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

Discussions similaires

  1. byte signé/non-signé pour image.
    Par Furior dans le forum Langage
    Réponses: 2
    Dernier message: 10/05/2012, 10h02
  2. Manipulation signé non-signé
    Par MSP91120 dans le forum VB.NET
    Réponses: 6
    Dernier message: 20/08/2010, 17h30
  3. promotion numérique signé non signé
    Par Débutant_ASM dans le forum Débuter
    Réponses: 6
    Dernier message: 03/03/2010, 12h56
  4. Problème de valeur signé, non signé sous PL7 PRO
    Par absy456 dans le forum Automation
    Réponses: 2
    Dernier message: 09/06/2009, 17h27
  5. Conversion entier signé/non signé
    Par BATCHOS CON TEQUILA dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 03/03/2009, 16h53

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