fonction chr(), ord() et \x01 [python] - Python - Programmation
Marsh Posté le 11-02-2010 à 22:27:59
Xocs a écrit : Bonjour, Je comprend mal quelque chose avec la fonction chr() Ainsi, on a :
Et pour la réciproque, on a :
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
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"
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 ... ? |
http://en.wikipedia.org/wiki/Basic [...] age_layout
Faut pas partir en vrille comme ça
Marsh Posté le 12-02-2010 à 02:11:33
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
Marsh Posté le 11-02-2010 à 19:41:26
Bonjour,
Je comprend mal quelque chose avec la fonction chr()
Ainsi, on a :
Et pour la réciproque, on a :
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
Message édité par Xocs le 11-02-2010 à 20:15:07