Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Web Development

Base quoi? Une introduction pratique au codage de base

by
Difficulty:IntermediateLength:LongLanguages:

French (Français) translation by Ahmad Fauzan (you can also view the original English article)

À un jeune âge, nous apprenons à compter sur nos doigts - en commençant par 1-5, puis 1-10, et peut-être que si vous êtes particulièrement entreprenant en tant que jeune enfant, vous apprendrez à compter jusqu'à 20, 30 et plus . Personne ne tente jamais de nous éclairer sur le fait que nous formulons des hypothèses mathématiques plus complexes. nous connaissons tous Base10, pour être précis.

Dans cet article, nous commencerons par acquérir une compréhension plus complète de Base10 et de sa structure, puis nous aborderons le binaire (Base2, les blocs de construction de l'informatique). Enfin, nous terminerons en parlant de Base32 et Base64. À chaque étape, nous discuterons des avantages et des utilisations de chaque type.


Pourquoi Base10

Nous avons 10 doigts.

Alors, pourquoi avons-nous choisi Base10? Ce n'est pas parce que les lettres 0-9 existent; c'était en fait le résultat du choix d'utiliser Base10. En fait, c'est probablement à cause du processus d'apprentissage que nous avons décidé plus haut - nous avons 10 doigts. Cela facilite beaucoup la compréhension du système.

Parlons donc un peu de la structure de Base10. Ce sera le fondement de la compréhension que nous utiliserons dans la discussion suivante.

À partir de 0, nous comptons jusqu'à 9, en remplissant la colonne '1'. Une fois que la colonne des unités est pleine (en a 9), il s’agit du maximum pour la colonne. Nous passons donc à la colonne suivante (à gauche) et commençons à 1. À toutes fins utiles, nous pouvons postuler qu'il y a un nombre infini de zéros non significatifs avant notre première colonne significative. En d'autres termes, '000008' est identique à '8'. Ainsi, au fur et à mesure que chaque colonne se remplit, la colonne suivante est augmentée d'une unité et nous revenons à la colonne précédente pour la remplir de la même manière qu'auparavant. Spécifiquement, la colonne 1 augmente de 0 à 9, puis dix autres sont ajoutées à la colonne des dizaines. Ceci est poursuivi et si la colonne des dizaines est à 9 et que la colonne 1s est à 9, 1 est ajouté à la colonne de 100, et ainsi de suite. Nous connaissons tous cette partie du problème.

Considérons le nombre 1020. En partant de la droite, on peut comprendre '0 * 1 + 2 * 10 + 0 * 100 + 1 * 1000'. Maintenant, considérons le nombre 5.378. Nous pouvons comprendre cela comme '8 * 1 + 7 * 10 + 3 * 100 + 5 * 1000'. Une fonction généralisée pour comprendre Base10 est la suivante:

(10 élevé à la puissance de la colonne à partir de la droite -1) * (le nombre trouvé dans la colonne)

Par conséquent, s'il y a un 6 dans la 5ème colonne à partir de la droite, 10 ^ 4 * 6 = 60 000.

Nous pouvons voir qu'il s'agit d'une formule généralisable pour comprendre tous les systèmes de base.


Base2 (binaire)

C'est pourquoi ces systèmes sont appelés Base (N).

Le prochain système dont nous allons parler est Base2, ou binaire. Le binaire est constitué de deux chiffres, 0 et 1. Cela se prête bien à l'informatique pour de nombreuses raisons, principalement parce que les ordinateurs reposent sur des commutateurs à deux états: activé ou désactivé. Le binaire est le système le plus fondamental nécessaire pour toutes les opérations logiques (pensez 'vrai' et 'faux').

Alors, comment fonctionne le binaire? Prenez la formule ci-dessus, et au lieu d’en utiliser dix, utilisez deux. Et sur cette note, c’est pourquoi ces systèmes sont appelés Base (N).

(2 élevé à la puissance de la colonne par la droite -1) * (le nombre trouvé dans la colonne)

Alors prenons le nombre arbitraire 1001101 en binaire et appliquons cette formule.

(1 * 1) + (0 * 2) + (1 * 4) + (1 * 8) + (16 * 0) + (32 * 0) + (64 * 1) = 77

 'Attends!', Tu réfléchis. 'Si le binaire est tout ce dont sont faits les ordinateurs, comment écririez-vous les lettres en binaire?' Bonne question. Cela nous amène à notre introduction de Base16.


Base16

Il s'agirait plutôt d'une représentation à un chiffre de 10.

Imaginons un instant que nous avions 11 doigts. Nous utiliserions naturellement un système de Base11. En plus de cela qui semble difficile à imaginer actuellement, quelles autres implications cela aurait-il? L'implication la plus importante est peut-être que nous aurions eu une autre augmentation au-delà de 9 dans la colonne 1. Mais ce ne serait pas un '10', car 10 ne se limite pas à la colonne 1. Il s'agirait plutôt d'une représentation à un chiffre de 10. Et, en fait, c'est exactement comme cela que les lettres fonctionnent dans les systèmes de base au-delà de Base10 à Base62, avec quelques réserves (que nous aborderons plus tard lorsque nous parlerons de Base32).

Imaginons utiliser Base11, mais substituons un A majuscule au '10' à un chiffre mentionné précédemment. Comment écririons-nous le nombre 54?

Puisque nous savons que la première colonne de gauche est la colonne '11', nous commencerions par diviser 54 par onze, ce qui nous donne 4 avec un reste de 10. Si 'A' représente 10, le nombre 54 serait représenté à la Base11 comme 4A.

Faisons cela à l'envers, avec la formule que nous avons utilisée précédemment.

(11 élevé à la puissance de la colonne à partir de la droite - 1) * (le nombre trouvé dans la colonne)

Dans ce cas, cela signifierait:

(1 * A) + (4 * 11)

Maintenant, remplacez 10 par A:

(1 * 10) + (4 * 11) = 54

Hexadécimal

Comment est-ce utile, vous vous demandez? Base11 peut ne pas être nécessairement utile (sauf si vous avez une sorte de structure de données qui tirerait profit d'un système Base11). Cependant, Base16 est utilisé dans tous les systèmes informatiques à des fins multiples. Également appelé hexadécimal, Base16 utilise les nombres 0 à 9 suivis des lettres a-f (non sensible à la casse). En particulier, vous verrez les hexadécimaux utilisés pour définir les couleurs RVB en CSS (et dans la plupart des widgets de sélecteur de couleurs du logiciel de bureau), avec deux chiffres pour chacun des canaux rouge, vert et bleu.

Ainsi, par exemple, #A79104 produirait r = A7, g = 91, b = 04. En décimales, cela équivaudrait à r = 167, g = 145, b = 4; la couleur résultante serait un jaune d'or. Deux chiffres hexadécimaux mis ensemble peuvent représenter 256 nombres différents. Il y a donc 256 ^ 3 (16 777 216) combinaisons de nombres possibles dans le système hexadécimal RGB, représentées par seulement 6 caractères (ou 3 si vous utilisez la méthode du raccourci, où chacun des trois chiffres est implicitement doublé, par exemple #37d == 3377dd).

Base16 est souvent utilisé dans les langages d'assemblage, qui sont le langage de programmation accessible le plus bas. Les hexadécimaux étant faciles à convertir en binaire, ils constituent un moyen plus simple d'écrire des instructions de code d'assemblage.

Remarque: il en va généralement de même pour la popularité de Base32 et Base64. ces codages sont utilisés car ils sont naturellement meilleurs pour les données binaires (car ils ont une puissance de 2) et qu'il existe au moins 64 caractères sécurisés (et qu'il n'y en a pas 128) sur presque tous les ordinateurs.

Pour un exemple hexadécimal, prenons le nombre 1100 en hexadécimal, ce qui équivaut à 4352 en décimal. Le même nombre en binaire est 0001 0001 0000 0000. La conversion hexadécimale en binaire est une opération simple d'utilisation d'une table de conversion, où 0 en hexadécimal est 0000 en binaire et F en hexadécimal est 1111 en binaire.

Notez que les 0 à gauche du premier nombre indiquent que le nombre binaire est en bits, où les 0 à l'extrême gauche sont simplement des colonnes vides. Fondamentalement, ils ne sont pas nécessaires. cependant, vous rencontrerez du binaire écrit presque exclusivement de cette façon. Cette pratique s'appelle le remplissage et est pratiquée car la longueur des données est inconnue et pourrait donc poser problème lors de plusieurs transmissions de données; en remplissant la chaîne finale, la taille des données est garantie, par exemple 4 bits (pour les fichiers binaires). Le rembourrage se produit également dans d'autres schémas de codage couramment utilisés et basés sur des spécifications; en particulier, Base32 et Base64 utilisent le signe égal ('=') pour le remplissage.


Base32

On peut supposer que Base32 correspond aux nombres 0-9, puis aux 22 premières lettres de l'alphabet (jusqu'à V).

Rappelez-vous quand nous avons mentionné la mise en garde ci-dessus? C'est la mise en garde: la définition de Base32 la plus communément acceptée est en fait un codage qui commence par les 26 premières lettres de l'alphabet et se termine par les chiffres 2-7. Ceci est défini dans la demande de commentaires (RCFC) 4648 de l'Internet Engineering Task Force, qui définit également Base16 et Base64. Remarque: la différence est que le codage pour 0 est A et non pas 0. Pour coder une chaîne en Base32, les instructions suivantes sont exécutées.

Tout d'abord, la chaîne à coder est divisée en blocs de 5 octets (40 bits en binaire). Les lettres sont représentées par des blocs de 8 bits en ASCII (la norme pour les ordinateurs). Ainsi, pour 5 lettres, il y a 40 bits. (Cette définition de 8 bits pour chaque lettre autorise un total de 255 caractères en ASCII.)

Ensuite, divisez ces 40 bits en 8 blocs de cinq bits; donc, pour chaque 5 lettres, il y a 8 blocs à encoder en base32. Mappez chacun de ces blocs sur un mappage de caractères 5 bits dans l'alphabet Base32. Par exemple, si le bloc de cinq bits est 00010 (ou décimal 2), le caractère mappé est la lettre, c. Si le bloc de cinq bits est 01010 (décimal 10), le caractère mappé est la lettre K.

Appliquons ces étapes à la chaîne 'yessir'.

Caractère Décimal ASCII Binaire ASCII 8 bits
y 89 01111001
e 101 01100101
s 115 01110011
s 115 01110011
je 105 01101001
r 114 01110010

Prenons les représentations binaires et les concaténons maintenant, en les scindant en groupes de 5 bits

Une remarque sur ce qui précède: comme la spécification indique que le codage doit être effectué en morceaux de 8 morceaux de 5 bits, nous devons tamponner avec 0 si le nombre de bits n'est pas divisible par 5 la deuxième ligne) et avec = si le nombre de morceaux n'est pas divisible par 8. Les valeurs 'null' seront remplacées par le caractère de remplissage, '='.

Chacun de ces nombres binaires 5 bits correspond à un caractère de l'alphabet 32 ​​bits; spécifiquement, la sortie pour yessir serait PFSXG43JOI ======

Un processus similaire est suivi pour Base64. Il existe quelques différences fondamentales entre Base32 et Base64. Base64 comprend les lettres A-Z, a-z, les chiffres 0 à 9 et les symboles + et /. Comme mentionné précédemment, le symbole '=' est utilisé pour le remplissage. Les différences sont principalement que toutes les lettres sont sensibles à la casse et que tous les chiffres sont utilisés (au lieu du sous-ensemble 2-7). Les symboles + et / sont également ajoutés.

Le processus de codage Base64 prend des chaînes de 24 bits (3 lettres) et les divise en quatre morceaux de 6 bits, mappant le nombre binaire résultant sur l'alphabet Base64. Voyons donc notre exemple précédent, la chaîne 'yessir'.

Il y a quelques points importants à noter. Premièrement, Base64 est sensible à la casse. Deuxièmement, comme le nombre de bits (48) était divisible par 6, aucun remplissage de bits n’était nécessaire. Le nombre de morceaux de 6 bits était également divisible par quatre (ce qui signifie également que le nombre de caractères saisis était divisible par 3), de sorte qu'aucun remplissage nul ('=') n'était nécessaire non plus.


Résumé de Base16, Base32 et Base64

Ces bases conviviales sont exploitées dans toutes les structures de programmation.

Ces bases conviviales sont exploitées dans toutes les structures de programmation. Les données binaires sont codées dans ces bases pour assurer la fidélité du transfert et les bloquer contre les erreurs pouvant découler d'un transfert accidentel de données binaires. Ils reposent sur des tables de caractères standard et ne fonctionnent que si le codeur et le décodeur utilisent la même table. Par exemple, il existe des versions modifiées de base32 largement acceptées, y compris celle de Douglas Crockford qui modifie certains des caractères acceptables, notamment la lettre 'u' afin d'éviter toute obscénité involontaire.


Encodage en pratique

Outre l'utilisation régulière de nombres hexadécimaux pour les couleurs CSS, Base32 et Base64 sont utilisés de manière cohérente sur le Web. Bien que le processus d'encodage officiel pour Base32 et Base64 augmente la taille de la chaîne, l'encodage des nombres en Base64 ou Base32 peut être très bénéfique pour des choses comme le raccourcissement des URL, où une URL peut pointer vers / foo / id. Considérez les nombres décimaux suivants et leurs équivalents Base32 et Base64.

Décimal Base16 Base32
20 U U
50 BS y
967 6h PH
745619 WYET C2CT
7241930 G5AGK boDK
798312345192 xhpr7lti LnfH65o

Comme vous pouvez le constater, l’utilisation de Base64 ou Base32 pour réduire les nombres présente des avantages considérables. Lorsque chaque caractère compte, l’utilisation de ces codages de base vous permet de sauvegarder des caractères. Dans de nombreux cas, le nombre codé est environ la moitié de la longueur du nombre non codé.


Une note sur Base62 et Base64 modifiée par URL

Quels autres types d'applications Web utiliseriez-vous pour ces encodages?

Si vous encodez le nombre 959 en Base64, le résultat est O /. Bien sûr, ce n'est pas une valeur sûre pour l'URL à cause du '/', donc une URL pointant vers O / ne serait pas décodée en tant que O /, mais en tant que O (qui est la valeur décimale 14). Il serait également contraire à l'objectif de coder le '/' en tant qu'équivalent de code ASCII (%47%), car cela allongerait considérablement l'adresse URL. Deux solutions principales sont apparues pour lutter contre ce problème. L’une est une variante de Base64 sans danger pour l’URL qui remplace respectivement + et / avec - et _. Il supprime également la spécification d’ajout de caractères = pour le remplissage. L'autre option consiste à utiliser un codage Base62, qui conserve presque tous les avantages de Base64 et supprime les signes + et /. Cependant, le codage Base62 n’est pas aussi facile à appliquer qu’un substitut de la transmission binaire et est donc beaucoup moins populaire.


Conclusion

C'est la fin! Vous avez maintenant une connaissance fondamentale des systèmes de base, en particulier de leur application au codage de données binaires. Quels autres types d'applications Web utiliseriez-vous pour ces encodages?

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.