Codage des caractères — ASCII
Codage des caractères — ASCII
Objectifs cantonaux : O2.3, O2.4.
Cours complet sur la plateforme Runestone de Cédric Donner : Codage ASCII.
Un ordinateur ne stocke que des nombres (donc, en dernier ressort, des bits). Pour représenter du texte, il faut donc une convention qui associe un nombre à chaque lettre, chiffre ou symbole. La plus ancienne et la plus connue de ces conventions est le code ASCII (American Standard Code for Information Interchange).
La table ASCII
▷ Définition — Table ASCII
La table ASCII associe un nombre entier (de 0 à 127) à chaque lettre (majuscule et minuscule), chiffre, signe de ponctuation et caractère de contrôle (espace, retour à la ligne, …). Elle a été codée sur 7 bits, ce qui donne \(2^7 = 128\) caractères possibles.
! Majuscules ≠ minuscules
Dans la table ASCII, une majuscule et sa minuscule correspondante n’ont pas le même code : il y a un décalage constant de 32 entre les deux (par exemple A vaut 65 et a vaut 97).
Le caractère A vaut \(65\) en décimal, \(01000001_2\) en binaire et \(41_{16}\) (noté 0x41) en hexadécimal. On préfère souvent la notation hexadécimale : plus compacte, elle correspond exactement à 2 chiffres pour un octet (8 bits).
ASCII et Python
◈ Syntaxe — ord() et chr()
ord(c) # renvoie le code (décimal) du caractère c
chr(code) # renvoie le caractère associé au codec = 'A'
print("Décimal :", ord(c)) # 65
print("Binaire :", bin(ord(c))) # 0b1000001
print("Hexadécimal :", hex(ord(c))) # 0x41def upper(char):
code = ord(char)
if ord('a') <= code <= ord('z'):
char = chr(code - 32)
print(char)
upper('c') # affiche C
upper('$') # affiche $ (inchangé)L’écart constant de 32 entre majuscules et minuscules permet ce genre de calcul directement sur les codes.
Exercice 1 — coder un message
En utilisant la table ASCII (fournie en classe), codez en binaire (paquets de 8 bits) puis en hexadécimal le message Salut!, sans outil de conversion automatique.
Exercice 2 — décoder un message
Un message a été intercepté sous cette forme hexadécimale :
0x43 0x48 0x31 0x32 0x20 0x30 0x35 0x36 0x32
! Indice
Dans la table ASCII, tous les chiffres X sont codés 0x3X. Par exemple 0x34 code le chiffre 4.
Décodez ce message caractère par caractère.
Exercice 3 — type de caractère
Écrivez une fonction char_type(char) qui, à partir du code ASCII d’un seul caractère char, affiche :
MAJUSCULEs’il s’agit d’une lettre majuscule,MINUSCULEs’il s’agit d’une lettre minuscule,CHIFFREs’il s’agit d’un chiffre,ESPACEs’il s’agit d’une espace,AUTREsinon.
◈ Exemples attendus
>>> char_type('A')
MAJUSCULE
>>> char_type('z')
MINUSCULE
>>> char_type('7')
CHIFFRE
>>> char_type(' ')
ESPACE
>>> char_type('$')
AUTRE
! Combien de bits pour 128 caractères ?
Sur 7 bits, on code \(2^7 = 128\) caractères — exactement le nombre de caractères de la table ASCII de base. C’est pour cela qu’on parle d’ASCII « sur 7 bits », même si chaque caractère occupe en réalité un octet entier (8 bits) en mémoire.
Devoir donné par Cédric
Terminer les exercices de codage/décodage ASCII (message codé, message décodé, fonction char_type).