Bonjour à tous :) ,

Aujourd’hui je vais vous parler des valeurs ASCII, et nous allons voir ce qu’elles permettent en C.

Introduction

En informatique les caractères sont codés (représentés) par des valeurs numériques. Plus généralement un “codage de caractère” est un code qui associe un jeu de caractères d’une langue à un jeu de quelque chose d’autre (nombres, signaux électriques, durée…). Tout le monde connait le code Morse, qui associe une série de pressions courtes et longues à un alphabet.

Vous l’avez compris il n’existe pas de méthode pour stocker des caractères directement.

Valeurs ASCII et principes

Inventée en 1961, la norme ASCII (American Standard Code for Informations Interchange) est une norme de codage de caractères très connue. Allez on entre dans le vif du sujet :hihi: .

L’ASCII définit 128 caractères numérotés de 0 à 127 codés sur sept bits. Toutefois la majorité des ordinateurs d’aujourd’hui travaillent sur huit bits (un octet), chaque caractère en ASCII est donc codé sur un octet, dont le 8ème bit est 0.

Les codes de 0 à 31 ne sont pas des caractères linguistiques, ce sont des caractères de contrôle ou encore de séquences d’échappement.

Ils permettent notamment en C :

  • le retour à la ligne, symbolisé en C par : ‘\n‘ (sa valeur est 10)
  • la bip sonore : ‘\a‘ (sa valeurs est 7)
  • et bien d’autres…

Les codes 65 à 90 représentent les majuscules, et les codes 97 à 122 les minuscules.

Les chiffres sont compris entre 48 et 57. Le numéro 32 est l’espace. Les autres correspondent à des signes de ponctuations et autres symboles.

ASCII-valeur
Maintenant on va étudier un exemple en C utilisant les valeurs ASCII.

Comment faire pour convertir une lettre majuscule en minuscule ? Il est vrai qu’il existe déjà une fonction dans la bibliothèque standard pouvant résoudre notre problème, mais je vous propose de comprendre “comment ça marche” :vent: .

int min(int c)
{
    if (c >='A' && c <= 'Z')
        return c + 'a' - 'A';
    else
        return c;
}

Oui c’est tout :P . La fonction analyse si le paramètre envoyé est bien une lettre majuscule. Si il l’est, la fonction retourne le caractère c :

  • en lui ajoutant la valeur de ‘a‘, c’est à dire 97.
  • en lui soustrayant la valeur de ‘A‘, c’est à dire 65.

Faites le calcul,  pour c = ‘B‘;

→ ‘B‘ + ‘a‘ – ‘A‘ = 66 + 97 – 65 = 98.

Ce qui correspond bien à la valeur du caractère ‘b:) . Comment est ce possible ? Et bien la différence entre la valeur numérique d’une majuscule et de la minuscule correspondante est la même pour toutes les lettres. Regarder plutôt :

  • b‘ – ‘B‘ = 98 – 66 = 32 ;
  • g‘ – ‘G‘ = 103 – 71 = 32 ;
  • z‘ – ‘Z‘ = 122 – 90 = 32 ;

Notez que l’on peut donc écrire dans notre fonction :  return c + 32;

Voilà un petit exemple sympathique :) .