Base64 vs HEX pour l'envoi de contenu binaire sur internet dans un document XML
Quel est le meilleur moyen d'envoyer du contenu binaire entre le système à l'intérieur d'un document XML
Je sais de Base64 et Hex, quelle est la réelle différence. Je suis actuellement en utilisant Base64, mais besoin d'inclure un externe communes bibliothèque pour cela, où que avec HEX je pense que je pourrais juste de créer une fonction.
- Donc, ce que vous dites, c'est que si vous avez ce nombre binaire 1110 hex à deux caractères pour chaque octet, donc, techniquement, vous avez la parole AABBCCDD qui serait alors la valeur hexadécimale, mais en Base64, il faut trois personnages AAABBBCCCDDD. Serait-ce la technique de la façon de le regarder. Je suis sûr que la AABBCCDD n'est pas la bonne valeur en HEXADÉCIMAL pour le nombre. Pourquoi certaines fonctions de Hachage renvoyer la valeur légèrement différentes longueurs. J'ai eu par exemple un rapport de 5 exemple, ce matin, que j'ai testé avec A, puis B, puis C et le B la valeur de hachage est d'un caractère moins que les deux autres. Doug
Vous devez vous connecter pour publier un commentaire.
Vous pouvez simplement écrire votre propre méthode pour Base64 bien... mais j'avais recommandons généralement de l'aide extérieure, bien testé les bibliothèques pour les deux. (C'est pas comme si il n'y a aucune pénurie d'eux.)
La différence entre Base64 et hex est vraiment juste combien d'octets sont représentés. Hex est une autre façon de dire "Base16". Hex à deux caractères pour chaque octet - Base64 prend 4 caractères pour chaque 3 octets, il est donc plus efficace que l'hex. En supposant que vous êtes en utilisant UTF-8 pour encoder le document XML, un 100K fichier de 200K pour encoder en hexadécimal, ou 133K en Base64. Bien sûr, il se pourrait bien que vous ne se soucient pas de l'espace de l'efficacité - dans de nombreux cas, il ne sera pas question. Si il ne question, alors clairement Base64 est de mieux en mieux sur ce front. (Il existe des alternatives qui sont encore plus efficaces, mais ils ne sont pas aussi commun.)
Il y a seulement deux "vraies différences':
Le radix. Base64 est en base 64, de la surprise et de l'hexagone en base 16.
L'encodage: base-64 code 3 octets de source en 4 en base 64 caractères (http://en.wikipedia.org/wiki/Base64#Examples); hex code 1 octet en 2 caractères hexadécimaux.
Donc base64 est plus compact que l'hex.
D'autres réponses clairement l'efficacité de la différence entre base16 et base64.
Il est plus à la base de la sélection de l'efficacité.
Base64 utilise plus que des lettres et des chiffres. Différentes implémentations utiliser différents caractères de ponctuation pour indiciating rembourrage, et qui constituent les deux derniers caractères de la série de 64. Ceux-ci peuvent inclure le signe plus "+" et de l'égalité "=". les deux problématiques dans les chaînes de requête HTTP.
Donc l'une des raisons en faveur de base16 sur base64 est que base16 valeurs peuvent être composés directement dans les chaînes de requête HTTP sans nécessiter de codage supplémentaire. Est-ce important pour vous?
Avis que c'est une préoccupation supplémentaire, en plus de l'efficacité. Ni de base est intrinsèquement meilleur ou pour le pire; elles sont seulement deux points sur une échelle, dans lequel vous trouverez différentes propriétés qui seront plus ou moins attrayants dans différentes situations.
Par exemple, envisager de base32. Il est 20% moins efficace que base64, mais il est encore approprié pour l'utilisation dans les chaînes de requête HTTP. La plupart de son inefficacité vient d'être insensible à la casse et éviter zéro "0" et un "1", à des erreurs dans la reproduction par l'homme.
Donc base32 introduit une nouvelle préoccupation; la facilité de reproduction pour l'homme. Est-ce une préoccupation pour vous? Si elle ne l'est pas, vous pouvez aller pour quelque chose comme base62, ce qui est toujours pratique dans les chaînes de requête HTTP, mais est sensible à la casse et comprend zéro "0" et "1".
Heureusement, j'ai précisé que le choix de l'encodage de la base est une question de glissement le long d'une échelle jusqu'à ce que vous obtenez la meilleure efficacité, vous pouvez avoir avant de sacrifier ce qui est important pour vous.
Wikipedia a une liste d'amusement de chiffre systèmes.
J'étais curieux de voir comment sur TERRE base64 peut convertir 3 octets d'entrée dans les 4 octets de sortie pour seulement 33% de croissance de l'espace (alors que hex convertit 1 octets d'entrée en 2 octets de sortie de 100% de croissance de l'espace). Pourquoi spécifiquement 3 octets d'entrée?
La réponse est:
3 octets = 3 x 8 bits = 24 bits.
Pourquoi la magie "24 bits" nombre? Ainsi, en base 64 représente les nombres de 0 à 63. Comment sont ceux représentés en binaire? Avec 000000 (0) pour 111111 (63).
Bingo! Chaque base64 personnage représente 6 bits de données d'entrée en utilisant une seule sortie octet (un seul caractère comme "Z", etc).
Donc 24 bits (3 octets de 8 bits de l'entrée) /6 bits (alphabet base64) = 4 octets de base64. Ça y est!
Ou, décrit une autre façon, à chaque Base64 personnage (qui est de 1 octet (8 bits)) encode les 6 bits de données réelles. Et si nous nous divisons en 8bits/6bits, nous voyons que les 33% de la croissance provient, comme déjà mentionné au début de ce post... Donc oui, Base64 toujours par une augmentation de la taille des données de 33% (plus un certain potentiel de rembourrage par le
=
des personnages qui sont parfois ajoutés à la fin de la base64 de sortie).Vous pouvez penser: "Pourquoi ne pas base128 (7 bits d'entrée = 8 bits de sortie), à seulement 14% de la taille de la croissance lors de l'encodage?". La réponse est que les base64 est le meilleur que nous pouvons trouver, depuis les 128 caractères ASCII ne sont pas imprimables. Nombreux sont les caractères de contrôle comme NULL etc.
Il y a évidemment les moyens de créer d'autres systèmes tels que peut-être "base81", etc, étant donné que vous pouvez faire tout ce que vous voulez si vous créer un algorithme de codage. Mais la beauté de la base64 est de savoir comment il encode les données de façon à proprement en blocs de 6 bits, et la façon dont il vous suffit de "lire à 3 octets et de sortie de 4" à coder, et "lire les 4 octets de sortie et de 3" pour les décoder. De sorte que le schéma de codage est devenu populaire.
Maintenant, vous ne sont heureusement plus après avoir lu cette.
Amusant de mise à Jour: en Parlant de l'encodage des styles avec plus de personnages... Il est venu à mon attention que Ascii85 aka Base85 existe et est légèrement plus efficace (25% de la taille des données de croissance lors de l'encodage que Base85 au lieu de 33% pour Base64): https://en.wikipedia.org/wiki/Ascii85
base64 a moins de frais généraux (base64 produit 4 caractères pour tous les 3 octets de données d'origine tout en hex produit 2 caractères pour chaque octet de données d'origine). Hex est plus lisible vous suffit de regarder les deux personnages et sait immédiatement ce que l'octet est derrière, mais avec base64 vous avez besoin de l'effort de décodage de l'4-les caractères du groupe, afin de débogage sera plus facile avec hex.
Est de taille importante pour vous?
Base64 est plus efficace de l'espace. À l'aide de 4 caractères pour représenter les 3 octets où hexadécimal utilise 2 caractères pour chaque octet. En d'autres termes: hex augmente la taille de la chaîne à 100%. Pour les petites chaînes qui fit que les params dans les demandes d'url, je n'aurais pas l'esprit le coût supplémentaire/taille.
Facilité d'utilisation est important pour vous?
Hex est plus facile à utiliser que Base64 parce que vous n'avez pas besoin de s'échapper (il peut contenir
+
,=
et/
) lors de l'utilisation de la chaîne comme un paramètre get dans l'url demandes.Est l'utilisation répandue important pour vous?
Je n'ai pas les chiffres, mais en Base64 peut-être plus connu du grand développeur de hex en fonction de plusieurs facteurs. Je savais à propos de base64 longtemps avant hex (base16).