Secondemps : encodage des caractères en informatique Une des

Transcription

Secondemps : encodage des caractères en informatique Une des
Seconde­mps : encodage des caractères en informatique
➔ Une des premières langues en informatique : l'ASCII
L'American Standard Code for Information Interchange (Code américain normalisé pour l'échange d'information), plus connu sous l'acronyme ASCII (prononcé «aski» en français) est une norme de codage numérique des caractères linguistiques (et autres) en informatique ; en effet, les ordinateurs au niveau du traitement de l'information ne peuvent fonctionner qu'avec des nombres ... Pire ! Au plus bas des instructions traitées par le processeur, les nombres ne peuvent être composés qu'avec les chiffres 0 et 1. La norme ASCII était la plus largement compatible (fonctionnant sur tous les ordinateurs) pour ce qui est des caractères latins non accentués (il n'y a pas d'accents en langues anglaises). Le jeu de caractères codés ASCII est le principal système qui a permis l'échange de textes en anglais à un niveau mondial à l'aide des ordinateurs. ASCII contient donc tous les caractères nécessaires pour écrire en anglais et ne peut coder que 256 caractères différents. Cela peut paraître beaucoup mais si vous comptez aussi les caractères imprimables (printable characters en anglais) comme les espaces, la ponctuation, les parenthèses, l'arobase et si vous comptez aussi quelques caractères de commandes (control characters en anglais) comme le saut de ligne, la marque d'un début de texte et si vous comptabilisez toutes les lettres distinctes de toutes les langues du monde, ce n'est bien évidemment pas assez ! Avec l'avènement de la mondialisation et de l'internationalisation des systèmes d'information, les limitations de l'ASCII ne sont plus acceptées que dans des domaines très techniques qui requièrent la compatibilité avec des protocoles ou systèmes anciens.
La norme ASCII n'est plus réellement utilisée à l'heure actuelle pour coder numériquement les textes, elle est maintenant surtout connue pour son influence incontournable sur les codages modernes de caractères qui lui ont succédé et qui se sont servis de cette norme ASCII pour prolonger à beaucoup d'autres caractères un tel codage numérique (codage des caractères accentués, des caractères vietnamiens, chinois,...). À l'heure actuelle, la norme de codage utf8 permet de coder énormément plus de caractères et donc d'échanger avec les ordinateurs en plus de langues ; bientôt la norme utf16 permettra d'échanger réellement dans toutes les langues du monde. Afin de comprendre comment est codé un caractère en informatique et, de manière plus générale, comment est codé un texte en informatique, il est bon de comprendre comment fonctionne la première norme : l'ASCII. Vous trouverez à l'intérieur du tableau ci­dessous, tous les caractères possibles codés numériquement par l'ASCII, les deux premières lignes correspondent à des caractères de commandes (on ne va donc pas trop s'y intéresser). Comment marche ce truc ?
1
Seconde­mps : encodage des caractères en informatique
➔ Les différentes bases d'écritures des nombres en mathématiques
Cette norme est donnée ici en base 16 et non en base 10 ! Pardon ? Il n'y a pas qu'une seule manière d'écrire les nombres entiers ? 42, c'est 42 ou c'est pas 42 ? 42 en base 10 vaut le 42 que vous connaissez ( 4×10 + 2×1 soit 4 dizaines et 2 unités) mais 42 en base 16 vaut le 66 que vous connaissez en base 10 (en effet 4×16 + 2×1=66 soit 4 «seizaines» et 2 unités !)... Rigolo... Mais encore plus rigolo, afin d'écrire un nombre (les mots mathématiques) en base 10, vous avez besoin de 10 chiffres (les lettres mathématiques) à savoir les symboles 0,1,2,3,4,5,6,7,8,9 ; afin d'écrire un nombre en base 16, vous avez besoin de 16 chiffres à savoir les symboles 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F ! L'écriture en base 16 est très souvent appelée l'écriture en base hexadécimale (on verra pourquoi elle est plus pratique que la base 10 en informatique).
exemples de conversions de bases
•
De la base 16 vers la base 10
Le nombre 3A en base 16 (ou hexadécimale) vaut 3×16 + 10×1=58 en base 10.
Le nombre 3E en base 16 (ou hexadécimale) vaut 3×16 + 14×1=62 en base 10.
3
2
Le nombre 3E8B en base 16 (ou hexadécimale) vaut 3×16 +14×16 +8×16 +11×1=16011 en base 10.
Facile !
•
De la base 10 vers la base 16
Donnons­nous 130 en base 10, comment peut­on faire pour l'écrire en base hexadécimale ?
Effectuons la division euclidienne de 130 par 16 : 130=8×16 +2 soit 8 «seizaines» et 2 unités. Aussi 130 en base 10 s'écrira­t­il 82 en base 16 !
Donnons­nous 195 en base 10 et effectuons la division euclidienne de 195 par 16 : 195= 12×16 + 3 soit 12 «seizaines» et 3 unités. Aussi 195 en base 10 s'écrira­t­il C3 en base 16 !
Donnons­nous 4090 en base 10 et effectuons la division euclidienne de 4090 par 16 : 4090 = 255×16 +10 ... Mince 10 unités mais combien de seizaines ? Plus que 15 en tout cas et 16 seizaines, ça va faire une centseizaine (un troisième chiffre quoi !). Effectuons alors la division euclidienne de 255 par 16 : 255=15×16 + 15 soit 15 centseizaines et 15 seizaines. 4090 en base 10 s'écrira donc FFA en base 16.
Application : complétez le tableau de conversion ci­dessous
100
452
décimal
hexadécimal
21
6B
16
32
64
128
256
E5F
Et comment lit­on le tableau ASCII ci­dessus alors ?
Prenons le caractère situé dans la cellule correspondant à la ligne de rang 6 et à la colonne de rang B soit, sauf erreur, «k minuscule» (vous remarquez par ailleurs que la casse est prise en compte, un K est différent d'un k). En fait les rangs des lignes correspondent aux seizaines et les rangs des colonnes aux unités. Ainsi le caractère imprimable k sera codé 6B en hexadécimal ou 107 en écriture base 10.
Application : • Encodez le mot LIBerTE en hexadécimal puis en base 10 par le code ASCII.
• Décodez le mot numérique "436F7262656175" encodé en base 16 par le code ASCII.
Quel problème peut rencontrer un ordinateur pour décoder un mot numérique ?
Que faudrait­il pour l'ordinateur afin qu'il ne puisse pas se tromper ?
2
Seconde­mps : encodage des caractères en informatique
➔ L'octet en informatique, le séparateur magique pour les ordinateurs.
Le cerveau d'un ordinateur (le processeur) est ultra puissant au niveau du calcul (cette puissance est quantifiée par sa fréquence , c'est à dire le nombre d'instructions qu'il peut effectuer en une seconde). La langue maternelle de l'ordinateur n'est composée que de simples nombres (on le savait) mais, ce qui est plus surprenant, des nombres dont les chiffres ne peuvent être que 0 ou 1 (c'est un principe électrique, on envoie des impulsions électriques à une même fréquence, quand le processeur reçoit du courant, c'est 1, quand il n'en reçoit pas, c'est 0). Satanas, Parbleu, Fichtre, il faudrait pouvoir écrire tous les nombres en base 2 (seulement avec deux symboles) ! C'est ce qu'on appelle l'écriture binaire ou le système binaire. Même principe que la base 16 dans l'absolu, vous avez donc des unités, des deuxaines,...
exemples
6
5
4
3
2
1
1110101 en écriture binaire correspond à 1× 2 + 1×2 +1×2 + 0×2 +1×2 +0×2 + 1×1=117 en base 10 soit 75 en hexadécimal soit la lettre u minuscule en ASCII (voir tableau).
Voilà, en langage machine, un ordinateur ne peut comprendre un u minuscule que par le nombre 1110101 en écriture binaire ! Et pour vous dire la vérité, il ne le comprendra même qu'avec un tel nombre à 8 chiffres donc 01110101 ! En effet, les mots binaires à 8 chiffres représentent ce qu'on appelle en informatique un octet. C'est la référence, le séparateur de base, le caractère de base, la lettre de base que comprend un ordinateur. L'ordinateur est construit comme cela ! On dit qu'un octet est composé de 8 bits, un bit vaut donc 0 ou 1, un bit est une impulsion électrique. Toutes les huit bits, un ordinateur sait qu'on lui a envoyé un caractère. Lorsque le caractère littéral s'écrit avec moins de huit bits, on complète à gauche avec des bits à 0 jusqu'à obtenir un octet complet (faux­ami anglophones : en langue anglaise, un octet se dit souvent byte à ne pas confondre avec un bit français). exemples de conversions de bases
•
De l'hexadécimal vers le binaire
Supposons que nous devions coder en langage machine la lettre m minuscule. Dans le tableau ASCII, cette lettre correspond au nombre 6D en hexadécimal et nous allons devoir le convertir en langage machine, c'est à dire en binaire. Ce qui est bien avec la base 16, c'est justement que 16 = 24 et qu'ainsi, les 16 chiffres de l'hexadécimal sont exactement tous encodables sur exactement 4 bits comme montré dans le tableau ci­dessous et qu'un nombre hexadécimal de deux chiffres se code alors facilement sur 8 bits, soit un octet, l'unité d'information de la machine. Cela ne marche pas aussi bien pour les 10 chiffres de la base 10.
base 2 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
0
base 16
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
6D en hexadécimal donne 01101101 en binaire. Il y a 256 manière décrire un octet et il y a 256 manières d'écrire un nombre à deux chiffres en hexadécimal. La correspondance est parfaite et la conversion d'un caractère ASCII en langage machine est simplifié par un passage intermédiaire en hexadécimal via le tableau.
Application
1. •
•
2. •
•
Écrivez le mot "Paix" en écriture hexadécimal (servez­vous du tableau ASCII).
Convertissez le mot "Paix" en écriture binaire (servez­vous du tableau de conversion juste ci­dessus).
Écrivez le mot "Libre" en écriture décimal (servez vous du tableau).
Convertissez le mot "Libre" en écriture binaire.
Quel est le passage intermédiaire le plus simple afin de convertir en binaire : la base 10 ou la base 16 ?
3
Seconde­mps : encodage des caractères en informatique
Première mission
1. Réalisez un algorithme avec Algobox qui soit capable de convertir un octet binaire en un nombre écrit en base 10.
2. Réalisez un algorithme avec Algobox qui soit capable de convertir les nombres en base 10 de 0 à 256 en un nombre à deux chiffres en base 16.
3. Réalisez un algorithme avec Algobox qui soit capable de convertir un nombre à 2 chiffres en base 16 en octet binaire.
4

Documents pareils