1 points par GN⁺ 2 시간 전 | Aucun commentaire pour le moment. | Partager sur WhatsApp
  • En divisant l’ASCII en 7 bits entre les 2 bits de poids fort (groupe) et les 5 bits de poids faible (valeur), puis en l’organisant dans une table à 4 colonnes, la relation entre caractères de contrôle et caractères imprimables apparaît immédiatement
  • La touche CTRL met à 0 les bits de poids fort du caractère saisi, ce qui produit le caractère de contrôle (control character) partageant les mêmes 5 bits de poids faible
  • Par exemple, si l’on appuie sur CTRL avec [(10 11011), on obtient ESC(00 11011), ce qui s’explique par une opération binaire AND
  • La raison pour laquelle ^J correspond à un saut de ligne, ^H à un retour arrière et ^I à une tabulation repose sur la même structure ; l’affichage ^M(CR) dans les fichiers texte Windows suit le même principe
  • Les tables ASCII classiques masquent ce motif, mais en séparant les colonnes par groupes de 32, l’intention de conception devient évidente

Découverte de la table ASCII en 4 colonnes

  • L’utilisateur Hacker News soneil a publié une version de la table ASCII disposée en 4 colonnes de 32 éléments
  • Cette disposition permet de voir immédiatement que le passage des majuscules aux minuscules correspond à une différence d’un seul bit, et que les lettres de l’alphabet suivent le schéma 40h + valeur d’ordre (les minuscules étant en 60h)
  • On y voit aussi tout de suite pourquoi ^\[ correspond à ESC

Structure de l’encodage ASCII sur 7 bits

  • ASCII est un encodage sur 7 bits ; les 2 premiers bits représentent 4 groupes et les 5 suivants 32 valeurs
    • Groupe 00 : caractères de contrôle (NUL, SOH, STX, ESC, etc.)
    • Groupe 01 : caractères spéciaux et chiffres (Spc, !, ", #, etc.)
    • Groupe 10 : alphabet en majuscules (@, A, B, C, etc.)
    • Groupe 11 : alphabet en minuscules (`, a, b, c, etc.)
  • Les caractères d’une même ligne ont les mêmes 5 bits de poids faible, seuls les bits de groupe diffèrent

Table ASCII en 4 colonnes

Bits 00 (contrôle) 01 (spéciaux/chiffres) 10 (majuscules) 11 (minuscules)
00000 NUL Spc @ `
00001 SOH ! A a
00010 STX " B b
00011 ETX # C c
00100 EOT $ D d
00101 ENQ % E e
00110 ACK & F f
00111 BEL ' G g
01000 BS ( H h
01001 TAB ) I i
01010 LF * J j
01011 VT + K k
01100 FF , L l
01101 CR - M m
01110 SO . N n
01111 SI / O o
10000 DLE 0 P p
10001 DC1 1 Q q
10010 DC2 2 R r
10011 DC3 3 S s
10100 DC4 4 T t
10101 NAK 5 U u
10110 SYN 6 V v
10111 ETB 7 W w
11000 CAN 8 X x
11001 EM 9 Y y
11010 SUB : Z z
11011 ESC ; [ {
11100 FS < \ |
11101 GS = ] }
11110 RS > ^ ~
11111 US ? _ DEL

Principe de fonctionnement de la touche CTRL

  • Quand on appuie sur CTRL, les bits de poids fort du caractère saisi sont tous mis à 0, ce qui le déplace vers le groupe des caractères de contrôle (00)
  • Cela peut se représenter par une opération binaire AND :
    • 10 11011([) AND 00 11111(CTRL) = 00 11011(ESC)
  • Ainsi, le fait que CTRL+[ produise ESC n’est pas une attribution arbitraire, mais une conception fondée sur des opérations binaires

Exemples pratiques

  • ^J(CTRL+J) correspond à LF (saut de ligne), ^H(CTRL+H) à BS (retour arrière), et ^I(CTRL+I) à TAB
  • Si l’on inspecte un fichier texte Windows avec cat -A, on voit apparaître ^M, car les fins de ligne Windows utilisent le format CR+LF
  • Le fait que les utilisateurs de vim emploient CTRL+[ dans le terminal à la place de ESC vient aussi de cette structure binaire

Aucun commentaire pour le moment.

Aucun commentaire pour le moment.