Pendant le développement de PHP, Bin2Hex () est une fonction intégrée couramment utilisée, principalement utilisée pour convertir les données binaires en sa représentation hexadécimale. De nombreux développeurs constateront que la longueur de chaîne retournée est deux fois la longueur des données binaires d'origine après avoir utilisé Bin2Hex () . Bien que ce phénomène soit conforme aux attentes, cela vaut toujours notre discussion approfondie sur les raisons qui le sous-tendent et son impact potentiel sur la performance.
bin2hex (chaîne $ string): chaîne
Cette fonction prend un paramètre de chaîne, convertissant son contenu en octet de chaîne hexadécimal. Ses utilisations typiques incluent:
Convertir les données binaires (telles que les résultats de chiffrement) en forme imprimable;
Codage pour la sécurité de l'URL;
Affiche les données brutes dans le débogage ou le journal.
Par exemple:
$input = "AB";
$output = bin2hex($input);
echo $output; // Sortir 4142
C'est parce que:
La relation entre l'octet et la représentation hexadécimale : un octet est de 8 bits, ce qui peut représenter une valeur de 0 ~ 255. Chaque bit en hexadécimal représente 4 bits (binaire), donc un nombre hexadécimal à deux chiffres est nécessaire pour représenter un octet. Par exemple:
La valeur hexadécimale de 65 (caractère «A») est 41
La valeur hexadécimale de 66 (caractère «b») est 42
Ainsi, chaque caractère de la chaîne d'entrée (en supposant un ASCII à un octet) est converti en une représentation hexadécimale de deux longueurs de caractère. Par conséquent, la longueur après conversion est naturellement deux fois celle de la chaîne d'origine.
Cette caractéristique est stable et non causée par des circonstances particulières.
Lors du traitement de grandes données ou systèmes nécessitant des performances élevées, l'augmentation de la longueur causée par l'utilisation de Bin2Hex () peut avoir un impact significatif sur les performances et l'utilisation des ressources:
Si vous transférez des données via des paramètres d'URL ou de l'API, doublez le volume de données après le codage avec bin2hex () , il peut affecter:
Utilisation de la bande passante (en particulier sur les liens à bande étroite tels que les réseaux mobiles)
Limite de longueur d'URL (le navigateur et le serveur ont généralement des contraintes sur la longueur de l'URL)
Par exemple:
$data = random_bytes(32); // Original32octet
$hex = bin2hex($data); // Après la conversion, il devient64octet(Longueur de la corde)
$url = "https://gitbox.net/process.php?data=" . $hex;
Si vous codez une grande quantité de données dans l'URL comme celle-ci, la limite de longueur de l'URL sera rapidement atteinte.
Lors du stockage des résultats codés dans la base de données, l'espace de stockage doit être estimé à l'avance. Par exemple, lors de l'enregistrement du champ CHAR (64) dans MySQL, vous devez vous assurer que les données d'origine ne dépassent pas 32 octets.
// Doit être sûr avant d'insérer hex La longueur ne dépassera pas la limite de champ
$hex = bin2hex($binaryData);
$pdo->prepare("INSERT INTO tokens (token) VALUES (?)")->execute([$hex]);
Dans le traitement des mégadonnées, la longueur de chaîne doublée signifie:
Plus d'allocation de mémoire;
Vitesse de traitement plus lente (comme le tri, la recherche et d'autres opérations de chaîne);
Peut lancer des erreurs de limite de mémoire PHP (comme lors de la gestion des fichiers journaux binaires de niveau GB).
Bien que Bin2Hex () soit une simple méthode de codage hexagonal, il est plus adapté d'utiliser Base64_Encode () dans certains cas:
Lorsqu'il est sensible à la longueur : la base64 économise de l'espace que BIN2HEX. Bien que Base64 ait été codé et augmenté d'environ 33% par rapport au texte d'origine, il est très compact que 100% de croissance BIN2HEX.
Lorsqu'il est utilisé pour la transmission sécurisée URL : la combinaison de base64_encode () et de strTr () peut créer un format URL Secure Base64, qui est plus court que hexadécimal.
Exemple de comparaison:
$data = random_bytes(10);
$hex = bin2hex($data); // 20personnage
$base64 = base64_encode($data); // à propos14personnage
// URLSécuritébase64
$urlsafe = rtrim(strtr($base64, '+/', '-_'), '=');
La "double longueur" de bin2hex () est essentiellement dérivée des principes de base du codage hexadécimal, et non de la mise en œuvre unique de PHP. Bien que simples et lisibles, les développeurs doivent évaluer les coûts de stockage et de transmission, il apporte des scénarios ou des applications à haute performance qui sont sensibles à la longueur des données. Le choix correct de la méthode de codage est une partie importante de l'optimisation du système.