Dans le développement de PHP, nous devons parfois convertir des entiers en format de chaîne binaire pour l'emballage de données, la transmission réseau ou la rédaction de fichiers. La fonction intégrée () de PHP est un outil puissant pour accomplir cette tâche. Cet article présentera l'utilisation de base de la fonction Pack () , se concentrera sur la façon de convertir les entiers en chaînes binaires et donnera des exemples pour illustrer des scénarios d'application pratiques.
La fonction Pack () est utilisée pour emballer les données en chaînes binaires, et sa syntaxe est la suivante:
string pack(string $format, mixed ...$values)
$ format : chaîne de format, indiquant comment les paramètres suivants sont emballés.
$ Valeurs : les données à emballer.
Pack () prend en charge une variété de caractères formatés, et cet article se concentre sur plusieurs mots clés utilisés pour emballer les entiers.
Lorsque vous traitez avec des entiers, voici quelques caractères de format commun:
C : caractères non signés (1 octet, plage 0–255)
N : entier court non signé (2 octets, Network Endianness)
V : entier court non signé (2 octets, commande d'octets hôte)
N : entier long non signé (4 octets, Network Endianness, Big Endianness)
V : entier long non signé (4 octets, hôte endian, petit endian)
J : entier 64 bits non signé (supports PHP 5.6+)
Par exemple, convertit Integer 1234 en une chaîne binaire de Endianness Network Endianness:
$binary = pack("n", 1234);
Nous voulons convertir 4294967295 (c'est-à-dire la valeur maximale d'un entier non signé 32 bits) dans l'ordre des octets du réseau:
$int = 4294967295;
$binary = pack("N", $int);
echo bin2hex($binary); // Sortir:ffffffff
Supposons que nous voulons construire un fichier de données binaires qui contient l'ID utilisateur (4 octets), le niveau (1 octet) et le statut (1 octet):
$userId = 1001;
$level = 5;
$status = 1;
$data = pack("NCC", $userId, $level, $status);
file_put_contents("user_data.bin", $data);
Le fichier généré contiendra un contenu binaire précis de 7 octets, idéal pour les systèmes intégrés ou l'échange de données multiplateforme.
Par exemple, si vous développez un protocole de communication de serveur de jeux, le client doit envoyer des paquets de données avec la structure suivante:
Baotou (2 octets, fixé à 0xABCD )
Longueur de données (2 octets)
ID utilisateur (4 octets)
Chaîne de jeton (longueur variable)
Vous pouvez le construire comme ceci:
$header = 0xABCD;
$userId = 12345;
$token = "abc123token";
$length = 4 + strlen($token);
$packet = pack("nnN", $header, $length, $userId) . $token;
// Envoyer à l'adresse du serveur,Par exemple:http://m66.net/api/receive_packet
Après avoir reçu le serveur, il peut déballer () de restaurer les données.
Problème endian : lors de la communication sur les plates-formes ou les réseaux, veillez à utiliser les formats N (Big Endian) ou V (Little Endian) pour assurer la cohérence.
Limite de plage de type : assurez-vous que les valeurs entières se trouvent dans la plage admissible des caractères de format spécifiés, sinon un débordement ou une troncature peut se produire.
Utiliser avec unpack () : pack () et unback () sont utilisés dans les paires, qui sont pratiques pour l'encodage et le décodage.
Avec la fonction Pack () , les programmeurs PHP peuvent facilement convertir des entiers en chaînes binaires, en réalisant un emballage de données efficace. Ceci est particulièrement important lors de la gestion des protocoles sous-jacents, de la génération de formats de fichiers ou de la communication avec des systèmes non PHP. La maîtrise de l'utilisation des caractères de format est une étape clé pour maîtriser le traitement sous-jacent de PHP.