Dans PHP, la fonction Pack () est utilisée pour emballer les données en chaînes binaires dans le format spécifié. Ceci est utile lors de la gestion des transferts de réseau, de l'écriture de fichiers et des interactions avec C ou d'autres langues de bas niveau. Cet article expliquera en détail l'utilisation de la fonction Pack () et combinera des exemples pour illustrer comment emballer les données au format binaire.
La syntaxe de base de Pack () est la suivante:
string pack(string $format, mixed $values, mixed ...$values)
$ Format : spécifie le format des données, composé d'un ou plusieurs codes de format.
$ VALEUR : La valeur à emballer peut être plusieurs paramètres.
La valeur de retour est une chaîne binaire emballée dans le format spécifié.
Code de format | décrire | Exemple |
---|---|---|
un | Chaîne remplie de caractères nul | pack ('A4', 'ABC') |
UN | Chaîne remplie d'espace | pack ('A4', 'ABC') |
c | Caractères signés (1 octet) | Pack ('C', 65) |
C | Caractères non signés (1 octet) | Pack ('C', 65) |
s | Entier court signé (2 octets) | pack ('s', 1234) |
S | Entier court non signé (2 octets) | pack ('s', 1234) |
je | Entier signé (longueur de mot de machine) | pack ('i', 123456) |
je | Entier non signé (longueur de mot de machine) | pack ('i', 123456) |
l | Signé entier long (4 octets) | Pack ('L', 123456) |
L | Entier long non signé (4 octets) | Pack ('L', 123456) |
f | Numéro de point flottant (4 octets) | pack ('f', 3.14) |
d | Numéro de point flottant à double précision (8 octets) | pack ('D', 3.14) |
n | Entier court non signé (Endian Big-endian 16 bits) | pack ('n', 1234) |
N | Entier long non signé (Endian Big-endian 32 bits) | pack ('n', 1234) |
<?php
// Emballer une longueur4chaîne et une32Bit non signé entier endian
$packed = pack('a4N', 'test', 123456789);
echo bin2hex($packed);
?>
Ici, «A4» signifie emballer une chaîne de longueur 4, la partie insuffisante est remplie de caractères NUL; «N» signifie emballer un entier grand-endian non signé 32 bits. Bin2hex () convertit le contenu binaire en hexadécimal pour une visualisation facile.
Supposons que vous deviez construire un paquet de réseau simple, y compris le type de commande (1 octet) et la longueur de données (4 octets Big Endian), puis le corps de données:
<?php
$command = 1; // Type de commande,1octet
$data = "Hello, m66.net!"; // Corps de données
$length = strlen($data); // Durée des données
// 打包Type de commande和Durée des données
$header = pack('CN', $command, $length);
// Épisser des paquets de données complètes
$packet = $header . $data;
// Représentation hexadécimale du package de sortie
echo bin2hex($packet);
?>
Dans le code ci-dessus, le type de commande de package «C» (1 octet entier non signé) et la longueur des données du package «n» (entier Big-endian de 4 octets). Les corps de données sont épissés tels quels.
<?php
$number = 65535;
$packed = pack('n', $number); // 按大端octet序打包为16Entier non signé
echo 'Packed data: ' . bin2hex($packed) . PHP_EOL;
$unpacked = unpack('nvalue', $packed); // Déballage
echo 'Unpacked value: ' . $unpacked['value'] . PHP_EOL;
?>
Pack () est un outil puissant pour manipuler les données binaires, particulièrement adaptées à la programmation réseau et au traitement des données sous-jacentes. En utilisant le code de format, vous pouvez contrôler avec précision la disposition des octets et le type de données.