W3docs

bin2hex()

La fonction bin2hex() convertit des données binaires en chaîne hexadécimale. Syntaxe, exemples et fonctions associées expliqués.

La fonction PHP bin2hex() convertit une chaîne d'octets bruts en sa représentation hexadécimale. Chaque octet (8 bits) devient exactement deux chiffres hexadécimaux, si bien que la chaîne renvoyée est toujours deux fois plus longue que l'entrée. Malgré son nom, l'entrée peut être n'importe quelle chaîne acceptant des données binaires — et non une chaîne de caractères "0"/"1" — ce qui fait de bin2hex() la méthode standard pour convertir des données binaires arbitraires (octets d'image, clés de chiffrement, hachages) en une forme ASCII sûre et imprimable.

Cette page couvre la syntaxe, un exemple fonctionnel, les différences avec les fonctions apparentées, et les pièges à éviter.

Syntaxe

bin2hex(string $string): string

La fonction prend un seul paramètre, $string — les données binaires à encoder — et renvoie une chaîne de caractères hexadécimaux en minuscules (0-9, a-f). Elle est disponible depuis PHP 4.0.5 et ne renvoie jamais false.

Exemple de base

php— editable, runs on the server

Ici, le texte "Hello, World!" est passé à bin2hex(), qui encode la valeur en octets de chaque caractère sous forme de deux chiffres hexadécimaux. La sortie est :

48656c6c6f2c20576f726c6421

Par exemple, le premier caractère H a la valeur d'octet 0x48, e vaut 0x65, et ainsi de suite — la concaténation de ces paires donne le résultat ci-dessus.

Pourquoi utiliser bin2hex()

La raison la plus courante est de rendre les données binaires sûres à afficher, journaliser, stocker dans une colonne texte ou envoyer dans une URL. Les octets bruts peuvent contenir des caractères non imprimables ou de contrôle ; leur forme hexadécimale est du pur ASCII.

<?php
// Generate 8 random bytes and show them as a hex token.
$bytes = random_bytes(8);
echo bin2hex($bytes); // e.g. "9f3a1c84e2b07d56" (16 hex chars)
?>

Un jeton de 16 caractères est produit car 8 octets correspondent à 16 chiffres hexadécimaux.

Inverser la conversion

Utilisez hex2bin() pour reconvertir une chaîne hexadécimale en octets d'origine. Les deux fonctions sont des inverses exactes pour toute entrée valide :

<?php
$original = "PHP";
$hex      = bin2hex($original);     // "504850"
$restored = hex2bin($hex);          // "PHP"

var_dump($original === $restored);  // bool(true)
?>

bin2hex() vs. dechex()

Il est facile de les confondre :

  • bin2hex() opère sur une chaîne d'octets et encode chaque octet sous forme de deux chiffres hexadécimaux.
  • dechex() opère sur un entier unique et renvoie sa forme hexadécimale sans rembourrage de zéros.
<?php
echo bin2hex("A");  // "41"  (the byte 0x41)
echo "\n";
echo dechex(65);    // "41"  (the integer 65)
echo "\n";
echo dechex(10);    // "a"   (no leading zero)
?>

Pièges à éviter

  • Minuscules uniquement. bin2hex() produit toujours des lettres minuscules. Si vous avez besoin de majuscules, appliquez strtoupper() au résultat.
  • La longueur est doublée. La longueur de la sortie est toujours 2 * strlen($input) ; une chaîne vide renvoie une chaîne vide.
  • Ce n'est pas du chiffrement. L'encodage hexadécimal est entièrement réversible et n'offre aucune sécurité — il ne fait que changer la représentation. Pour le hachage, utilisez md5() ou sha1(), qui renvoient déjà des chaînes hexadécimales.

Fonctions associées

  • hex2bin() — l'opération inverse.
  • dechex() — convertir un entier unique en hexadécimal.
  • ord() — obtenir la valeur en octets d'un seul caractère.
  • strlen() — mesurer la longueur en octets d'une chaîne.

Pratique

Pratique
Quelle est la fonction de bin2hex() en PHP ?
Quelle est la fonction de bin2hex() en PHP ?
Was this page helpful?