Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1564 connectés 

  FORUM HardWare.fr
  Programmation
  Python

  [python] fonction chr(), ord() et \x01

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[python] fonction chr(), ord() et \x01

n°1965163
Xocs
Posté le 11-02-2010 à 19:41:26  profilanswer
 

Bonjour, :hello:
 
Je comprend mal quelque chose avec la fonction chr()
 
Ainsi, on a :

Code :
  1. >>>chr(1)
  2. '\x01'


 
Et pour la réciproque, on a :

Code :
  1. >>>ord(\x01)
  2. 1


 
D'après ce que j'ai compris, chr(int) retourne la lettre dont on a indiqué le n° dans la table ASCII.
 
Mais pourquoi, dans le premier cas, n'a t-on pas '1' tout simplement (on a bien 'g' qui est de lecture directe ...) ?
 
Autre question qui en découle : lorsqu'un programme doit traiter le caractère '\x01', comment le transformer pour que, par exemple, lors d'un print il affiche tout simplement '1' dans le terminal (j'entends par là le caractère et non son numéro de position dans la table : par exemple, si j'ai '\x58', j'aimerais qu'il m'affiche bien 'X' et non 88 qui est sa position dans la table ASCII puisque ord('\x58') = ord('X') = 88 ) ?
 
Autrement dit, on a : '\x58' ==ord()==> 88 ==chr()==> 'X'
Mais par contre, on a '\x01' ==ord()==> 1 ==chr()==> '\x01'

Quelle est donc la fonction convert() qui permet : '\x01' ==ord()==> 1 ==convert()==> '1' ?
 
Et accessoirement, comme la réponse à chr() donne tantôt 'X', tantôt '\x01', j'imagine qu'il s'agit d'un ensemble homogène. S'agit-il d'une table d'encodage particulière qui commence ainsi : \x00 \x01 \x02 \x03 \x04 \x05 \x06 \x07 \x08 \x09 a b c d e f g ... ?
Ce qui me perturbe vraiment, c'est de trouver chr(88) = 'X' et chr(1) = '\x01' alors que je me serais attendu à avoir :
- soit :  chr(88) = 'X' et chr(1) = '1'
- soit :  chr(88) = '\x58' et chr(1) = '\x01
 
Merci beaucoup si quelqu'un peut éclairer ma lanterne :jap:

Message cité 1 fois
Message édité par Xocs le 11-02-2010 à 20:15:07
mood
Publicité
Posté le 11-02-2010 à 19:41:26  profilanswer
 

n°1965206
masklinn
í dag viðrar vel til loftárása
Posté le 11-02-2010 à 22:27:59  profilanswer
 

Xocs a écrit :

Bonjour, :hello:

 

Je comprend mal quelque chose avec la fonction chr()

 

Ainsi, on a :

Code :
  1. >>>chr(1)
  2. '\x01'
 

Et pour la réciproque, on a :

Code :
  1. >>>ord(\x01)
  2. 1
 

D'après ce que j'ai compris, chr(int) retourne la lettre dont on a indiqué le n° dans la table ASCII.

 

Mais pourquoi, dans le premier cas, n'a t-on pas '1' tout simplement (on a bien 'g' qui est de lecture directe ...) ?


Parce que l'indice de '1' dans la table ascii (ou plus généralement sont code point) n'est pas 1, mais 49 [:petrus75]

Xocs a écrit :

Autre question qui en découle : lorsqu'un programme doit traiter le caractère '\x01', comment le transformer pour que, par exemple, lors d'un print il affiche tout simplement '1' dans le terminal


Ça n'a strictement aucun sens. \x01 n'est pas un caractère imprimable, et il n'est sûrement pas équivalent à '1'.

Xocs a écrit :

(j'entends par là le caractère et non son numéro de position dans la table : par exemple, si j'ai '\x58', j'aimerais qu'il m'affiche bien 'X' et non 88 qui est sa position dans la table ASCII puisque ord('\x58') = ord('X') = 88 ) ?


Il n'y a pas de caractère imprimable à l'indice 1, il y a un caractère de contrôle nommé "Start of Header" [:petrus75]

Xocs a écrit :

Quelle est donc la fonction convert() qui permet : '\x01' ==ord()==> 1 ==convert()==> '1' ?


Cette question n'a toujours pas le moindre sens.

Xocs a écrit :

Et accessoirement, comme la réponse à chr() donne tantôt 'X', tantôt '\x01', j'imagine qu'il s'agit d'un ensemble homogène. S'agit-il d'une table d'encodage particulière qui commence ainsi : \x00 \x01 \x02 \x03 \x04 \x05 \x06 \x07 \x08 \x09 a b c d e f g ... ?


[:petrus75]

 

http://en.wikipedia.org/wiki/Basic [...] age_layout

 

Faut pas partir en vrille comme ça [:petrus75]


Message édité par masklinn le 11-02-2010 à 22:29:59

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1965234
Xocs
Posté le 12-02-2010 à 02:11:33  profilanswer
 

Ok, ma confusion venait du fait que je recevais des données d'une application qui les codait sur 1 byte.
 
Celle-ci envoyait donc \x01 par exemple pour la valeur 1. Mais je me rends compte désormais que c'était par rapport à la valeur de 1 en octal, et non par rapport à sa traduction en ASCII ... A côté de ça, elle envoie le bon code ASCII en ce qui concerne les lettres ...
 
Un petit mélange des genres !
 
Merci pour ton aide en tout cas :)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Python

  [python] fonction chr(), ord() et \x01

 

Sujets relatifs
probleme de modele sou firefox mais pas sous IE [voir fin post ]Sélectionner ligne entière langage word dans fonction javascript
Mettre à jour une liste en fonction d'une autre[C++] Spécialisation d'une fonction template un peu tordue...
Ajouter case à cocher dans fonction javascript en langage Word[PYTHON] WxWidgets et fonctionnement de wx.EXPAND pour un boutton
VBA Fin de la fonction je reviens dans ma boucle ???[Résolu] Python 2.6, MySQLdb et Windows, la combinaison perdante ?
[RESOLU] Soucis avec mysql_fetch_array dans une fonction[Python] Supprimer la fin d'un fichier texte
Plus de sujets relatifs à : [python] fonction chr(), ord() et \x01


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR