Comment le code binaire est-il converti en lettres?
par curiosité, comment le code binaire est-il converti en lettres? Je sais qu'il y a des sites qui convertissent automatiquement les binaires en mots pour vous, mais je veux comprendre les étapes intermédiaires spécifiques que le code binaire passe par avant d'être converti en lettres.
6 réponses
en supposant que par " code binaire "vous voulez dire simplement de vieilles données (séquences de bits, ou octets), et que par" lettres " vous voulez dire des caractères, la réponse est en deux étapes. Mais d'abord, quelques antécédents.
- un personnage est juste un symbole nommé, comme "lettre capitale LATINE A" ou "petite lettre grecque PI"ou" chevalier noir D'Échecs". Ne confondez pas un caractère (symbole abstrait) avec un glyphe (une image d'un personnage).
- jeu de caractères est un ensemble particulier de personnages, dont chacun est associé à un numéro spécial, appelé son codepoint. Pour voir les correspondances codepoint dans le jeu de caractères Unicode, voir http://www.unicode.org/Public/UNIDATA/UnicodeData.txt.
OK maintenant voici les deux étapes:
les données, si elles sont textuelles, doivent être accompagnées d'une codage des caractères, quelque chose comme UTF-8, Latin-1, US-ASCII, etc. Chaque personnage le schéma d'encodage spécifie en détail comment les séquences byte sont interprétées comme des codépoints (et inversement comment les codépoints sont encodés comme des séquences byte).
une fois que les séquences des octets sont interprétées comme des codépoints, vous avez vos caractères, parce que chaque caractère a un codépoint spécifique.
quelques remarques:
- dans certains encodages, certaines séquences de octets correspondent à aucun point de code du tout, donc vous pouvez avoir du caractère des erreurs de décodage.
- dans certains jeux de caractères, il y a des codépoints qui ne sont pas utilisés, c'est-à-dire qui correspondent à aucun caractère.
en d'autres termes, toutes les séquences d'octets ne signifient pas quelque chose en tant que texte.
Voici une façon de convertir des nombres binaires en caractères ASCII qui est souvent assez simple à faire dans votre tête.
1 - Convertissez tous les 4 chiffres binaires en un seul chiffre hexadécimal.
voici un graphique de conversion binaire en hex:
0001 = 1
0010 = 2
0011 = 3
0100 = 4
0101 = 5
0110 = 6
0111 = 7
1000 = 8
1001 = 9
1010 = a (the hex number a, not the letter a)
1011 = b
1100 = c
1101 = d
1110 = e
1111 = f
(les nombres hexadécimaux a à f sont les nombres décimaux 10 à 15. C'est ce qu'est hexadécimal, ou" base 16 " - au lieu que chaque chiffre soit capable de représenter 10 nombres différents [0-9], comme décimal ou" base 10 " fait, chaque chiffre est plutôt capable de représenter 16 nombres différents [0 - f].)
une fois que vous connaissez ce diagramme, convertir n'importe quelle chaîne de caractères binaires en une chaîne de caractères hexadécimaux est simple.
Par exemple,
01000100 = 0100 0100 = 44 hex
1010001001110011 = 1010 0010 0111 0011 = a273 hex
C'est assez Simple, non? Il est simple de convertir un nombre binaire de n'importe quelle longueur en son équivalent hexadécimal.
(cela fonctionne parce que hexadécimal est la base 16 et binaire est la base 2 et 16 est le 4ème puissance de 2, donc, il faut 4 chiffres binaires pour faire 1 chiffre hexadécimal. 10, d'un autre côté, n'est pas une puissance de 2, donc nous ne pouvons pas convertir binaire en décimal presque aussi facilement.)
2 - diviser la chaîne de chiffres hexadécimaux en paires.
lors de la conversion d'un nombre en ASCII, tous les deux chiffres hexadécimaux sont un caractère. Alors cassez la chaîne de hexagones en ensembles de 2 chiffres.
vous diviseriez un nombre hexadécimal comme 7340298b392 ceci en 6 paires, comme ceci:
7340298b392 = 07 34 02 98 b3 92
(notez que j'ai préparé un 0, puisque j'avais un nombre impair de chiffres hexadécimaux.)
ça fait 6 paires de chiffres hexadécimaux, donc ça va faire 6 lettres. (Sauf que je sais tout de suite que 98, b3 et 92 ne sont pas des lettres. Je vais vous expliquer pourquoi dans une minute.)
3 - Convertir chaque paire de chiffres hexadécimaux en un nombre décimal.
faites ceci en multipliant le (décimal équivalent du) chiffre gauche par 16, et en ajoutant le 2ème.
Pour exemple, b3 hex = 11*16 + 3, qui est 110 + 66 + 3, qui est 179. (B hex est de 11 décimales.)
4 - Convertissez les nombres décimaux en caractères ASCII.
maintenant, pour obtenir les lettres ASCII pour les nombres décimaux, gardez simplement à l'esprit que dans ASCII, 65 est une majuscule 'A', et 97 est une minuscule 'a'.
alors quelle est la lettre 68?
68 la 4e lettre de l'alphabet est en majuscule, Non?
65 = A, 66 = B, 67= C, 68 = D.
donc 68 est 'D'.
vous prenez le nombre décimal, soustrayez 64 pour les lettres majuscules si le nombre est inférieur à 97, ou 96 pour les lettres minuscules si le nombre est 97 ou plus, et c'est le nombre de la lettre de l'alphabet associé à cet ensemble de 2 chiffres hexadécimaux.
alternativement, si vous n'avez pas peur d'un peu d'arithmétique hex facile, vous pouvez sauter l'étape 3, et tout simplement aller directement de hex à ASCII, en se rappelant, par exemple, que
hex 41 = 'A'
hex 61 = 'a'
soustrayez donc 40 hex pour les lettres majuscules ou 60 hex pour les lettres minuscules, et convertissez ce qui reste en décimal pour obtenir le numéro de la lettre de l'alphabet.
Par exemple
01101100 = 6c, 6c - 60 = c = 12 decimal = 'l'
01010010 = 52, 52 - 40 = 12 hex = 18 decimal = 'R'
(en faisant cela, il est utile de se rappeler que 'm' (ou 'M') est la 13 lettre de l'alphabet. Donc vous pouvez compter jusqu'à 13 pour trouver une lettre qui est plus proche du milieu que de l'une ou l'autre extrémité.)
j'ai vu ça sur une chemise une fois, et j'ai pu lire dans ma tête:
01000100
01000001
01000100
j'ai fait comme ceci:
01000100 = 0100 0100 = 44 hex, - 40 hex = ucase letter 4 = D
01000001 = 0100 0001 = 41 hex, - 40 hex = ucase letter 1 = A
01000100 = 0100 0100 = 44 hex, - 40 hex = ucase letter 4 = D
la chemise disait "papa", ce que je trouvais plutôt cool, puisqu'elle était achetée par une femme enceinte. Son mari doit être un geek comme moi.
Comment ai-je su tout de suite que 92, b3 et 98 n'étaient pas des lettres?
parce que le code ASCII pour une minuscule 'z' est 96 + 26 = 122, ce qui en hex est 7a. 7a est le plus grand nombre hexadécimal pour une lettre. Rien de plus grand 7a pas une lettre.
Donc, c'est comment vous pouvez le faire en tant qu'humain.
Comment les programmes d'ordinateur?
pour chaque ensemble de 8 chiffres binaires, convertissez - le en un nombre, et cherchez-le dans une table ASCII.
(C'est une assez évident et simple. Un programmeur typique pourrait probablement penser à 10 ou 15 autres façons en l'espace de quelques minutes. Les détails dépendent de l'environnement du langage informatique.)
voulez-vous dire la conversion 011001100110111101101111
→foo
, par exemple? Vous prenez juste le flux binaire, le divisez en octets séparés (01100110
,01101111
,01101111
) et rechercher la ASCII caractère qui correspond à un nombre donné. Par exemple, 01100110
102 décimal et le caractère ASCII avec le code 102 est f
:
$ perl -E 'say 0b01100110'
102
$ perl -E 'say chr(102)'
f
(Voir ce que l' chr
la fonction n'.) Vous pouvez généraliser cet algorithme et avoir un nombre différent de bits par caractère et encodages différents, le point reste le même.
http://www.roubaixinteractive.com/PlayGround/Binary_Conversion/The_Characters.asp Il regarde juste ici... (pas ici mais il y a une table).
il y a 8 bits dans un octet. Un octet peut être un symbole. Un bit est activé ou désactivé.
pourquoi ne pas simplement faire cette prise 010010001001001 diviser en deux bits 8 lettre chacun (01001000, 01001001). Alors question les pouvoirs
01001000. 01001001.
les 8 premiers ignorent les trois premiers ils déterminent si c'est capital ou non, le droit à gauche faire des pouvoirs de 2 (2^1, 2^2 2^3 2^4 2^5). Alors additionnez toutes les lettres, il n'y en a qu'une, et elle = 8, et la 8 lettre de l'alphabet est h donc notre premier bit est la lettre h, essayez l'autre bit
pour lire les caractères ASCII binaires avec une grande vitesse en utilisant seulement votre tête:
les lettres commencent par les bits 01. Le Bit 3 est sur (1) pour les minuscules, off (0) pour les capitales. Scannez les bits 4-8 suivants pour le premier qui est activé, et sélectionnez la lettre de départ à partir du même index dans cette chaîne: "PHDBA" (pensez P. H. D., Bachelors in Arts). Par exemple: 1xxxx = P, 01xxx = H, etc. Convertissez ensuite les bits restants en une valeur entière (par exemple 010 = 2), et comptez le nombre de lettres de votre départ de la lettre. Par exemple: 01001010 => H+2 = J.