Transformer la chaîne BASE64 en chaîne BASE16 (HEX)?

Hé, j’essaie d’écrire un programme pour convertir une chaîne BASE64 en chaîne BASE16 (HEX).

Voici un exemple:

BASE64: Ba7+Kj3N HEXADECIMAL: 05 ae fe 2a 3d cd BINARY: 00000101 10101110 11111110 00101010 00111101 11001101 DECIMAL: 5 174 254 42 61 205 

Quelle est la logique pour convertir BASE64 en HEXIDECIMAL?
Pourquoi la représentation décimale est-elle fractionnée?
Comment se fait-il que la représentation binary soit divisée en 6 sections?

Je veux juste le calcul, le code que je peux gérer juste ce processus me déroute. Merci 🙂

Voici une liste de fonctions qui convertira deux bases: https://sites.google.com/site/computersciencesourcecode/conversion-algorithms/base-to-base


Edit (espérons que cela soit tout à fait clair …)

Vous pouvez trouver plus d’informations à ce sujet à l’entrée Wikipedia pour Base 64 .

Le jeu de caractères habituel utilisé pour la base 64, différent du jeu de caractères que vous trouverez dans le lien que j’ai fourni avant la modification, est le suivant:

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/

Le caractère ‘A’ est la valeur 0, ‘B’ est la valeur 1, ‘C’ est la valeur 2, … ‘8’ est la valeur 60, ‘9’ est la valeur 61, ‘+’ est la la valeur 62 et ‘/’ sont la valeur 63. Ce jeu de caractères est très différent de ce que nous utilisons habituellement pour binary, octal, base 10 et hexadécimal, où le premier caractère est ‘0’, qui représente la valeur. 0, etc.

Soju a noté dans les commentaires de cette réponse que chaque chiffre de base 64 nécessite 6 bits pour le représenter en binary. En utilisant le numéro de base 64 indiqué dans la question initiale et en convertissant la base 64 en binary, nous obtenons:

 B a 7 + K j 3 N 000001 011010 111011 111110 001010 100011 110111 001101 

Maintenant, nous pouvons rassembler tous les éléments (les espaces ne sont là que pour aider les humains à lire le nombre):

 000001011010111011111110001010100011110111001101 

Ensuite, nous pouvons introduire de nouveaux délimiteurs d’espace blanc tous les quatre bits en commençant par le bit le moins significatif :

 0000 0101 1010 1110 1111 1110 0010 1010 0011 1101 1100 1101 

Il devrait maintenant être très facile de voir comment ce nombre est converti en base 16:

 0000 0101 1010 1110 1111 1110 0010 1010 0011 1101 1100 1101 0 5 AEFE 2 A 3 DCD 

Pensez à la base 64 comme base (2 ^ 6). Ainsi, pour obtenir l’alignement sur un quartet hexagonal, vous avez besoin d’au moins 2 chiffres de base 64 …

avec 2 chiffres de base 64 vous avez un numéro de base (2 ^ 12), qui pourrait être représenté par 3 2 ^ 4 chiffres …

 (00)(01)(02)(03)(04)(05)---(06)(07)(08)(09)(10)(11) (base-64) maps directly to: (00)(01)(02)(03)---(04)(05)(06)(07)---(08)(09)(10)(11) (base 16) 

afin que vous puissiez soit convertir en fichiers binarys contigus … ou utiliser 4 opérations … les opérations peuvent traiter des valeurs binarys ou utiliser un ensemble de tables de recherche (pouvant fonctionner sur les chiffres codés par un caractère):

  1. premier chiffre base 64 au premier chiffre hexadécimal
  2. premier chiffre de base 64 à la première moitié du deuxième chiffre hexadécimal
  3. deuxième base 64 chiffres à la seconde moitié du deuxième chiffre hexagonal
  4. deuxième base 64 chiffres au troisième chiffre hexadécimal.

L’avantage est que vous pouvez travailler sur des bases codées sans conversion binary. c’est assez facile à faire dans un stream de caractères … Je ne suis pas au courant que cela soit réellement mis en œuvre nulle part.