À 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 tout-petit, vous apprendrez à compter jusqu'à 20, 30 et au-delà. . 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. A chaque étape, nous discuterons des avantages et des utilisations de chaque type.
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 ultérieure..
À 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 pratiques, nous pouvons postuler qu'il existe un nombre infini de zéros au début 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. Plus précisément, la colonne 1s augmente de 0 à 9, puis dix colonnes supplémentaires 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 ce morceau du grésillement.
Considérons le nombre 1020. En partant de la droite, nous pouvons le comprendre comme "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)
Donc, 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 là d'une formule généralisable pour comprendre tous les systèmes de base.
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 composé 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 ayant 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-en deux. Et sur cette note, c'est pourquoi ces systèmes sont appelés Base (N).
(2 élevé à la puissance de la colonne à partir de 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.
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 ainsi 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é ci-dessus. 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 utilisions 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
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ée hexadécimale, 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élection de couleurs sur le logiciel de bureau), avec deux chiffres pour chacun des canaux rouge, vert et bleu..
Donc, 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: La même chose est généralement vraie de la popularité de Base32 et Base64; ces encodages sont utilisés parce qu'ils sont naturellement meilleurs pour les données binaires (parce qu'ils ont une puissance de 2) et parce qu'il y a 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 de hexadécimal en binaire est une opération simple qui consiste à utiliser 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 lorsque plusieurs transmissions de données se produisent. 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.
On peut supposer que Base32 est les nombres 0-9 et ensuite les 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 du groupe de travail sur l'ingénierie Internet (RCFC) 4648, qui définit également Base16 et Base64. Notez que 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 se produisent.
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 2 décimal), 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".
Personnage | 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
01111 00101 10010 10111 00110 11100 11011 01001 01110 010 (00) null null null null null
Une note sur ce qui précède: comme la spécification indique que l'encodage doit être effectué par morceaux de 8 morceaux de 5 bits, nous devons ajouter un 0 avec le 0 si le nombre de bits n'est pas divisible par 5 (d'où le 010 (00) sur la deuxième ligne) et avec = si le nombre de morceaux n'est pas divisible par 8. Les valeurs "nulles" 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; en particulier, la sortie pour Oui monsieur
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. Alors, jetons un coup d'oeil à notre exemple précédent, la chaîne "yessir".
Binaire 8 bits: 01111001 01100101 01110011 01110011 01101001 01110010 Morceaux de 6 bits: 011110 010110 010101 110011 011100 110110 100101 110010 Base64: eWVzc2ly
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.
Ces bases conviviales binaires 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 non codées. 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, y compris la lettre "u" afin d'éviter toute obscénité involontaire..
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 de codage officiel pour Base32 et Base64 modifie la taille de la chaîne, le codage 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é..
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'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..
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??