Dans PHP, pack () et unback (), les fonctions sont souvent utilisées pour traiter les données binaires, et sont particulièrement adaptées à une utilisation dans des scénarios tels que la communication réseau, la lecture et l'écriture de fichiers, le codage des données, etc. où un contrôle précis des octets est requis. Cet article expliquera l'utilisation de ces deux fonctions en détail et joignera un tableau de comparaison de code de format complet pour vous aider à traiter plus efficacement les données binaires.
pack () : les données du package dans la chaîne binaire.
unback () : déballer la chaîne binaire dans un tableau PHP.
Les deux utilisent les codes de format pour définir la structure des données, qui déterminent comment les données sont codées / décodées.
$data = pack("C*", 72, 101, 108, 108, 111); // Volonté ASCII Convertir le code en chaîne "Hello"
echo $data; // Sortir: Hello
grammaire:
string pack(string $format, mixed $values...)
$data = "Hello";
$result = unpack("C*", $data);
print_r($result);
Sortir:
Array
(
[1] => 72
[2] => 101
[3] => 108
[4] => 108
[5] => 111
)
grammaire:
array unpack(string $format, string $data, int $offset = 0)
Code de format | illustrer | Longueur d'octet | Grande et petite extrémité |
---|---|---|---|
un | NUL remplit la chaîne (sans retirer Nul) | Spécifier la longueur | aucun |
UN | Les chaînes de remplissage des espaces (les espaces de queue seront retirés) | Spécifier la longueur | aucun |
H | Chaîne hexadécimale, chaque personnage représente 4 bits | Tous les deux chiffres = 1 octet | aucun |
H | Caps hexadécimal, chaque personnage indique 4 bits | Tous les deux chiffres = 1 octet | aucun |
c | Caractères signés (8 bits) | 1 octet | aucun |
C | Caractères non signés (8 bits) | 1 octet | aucun |
s | Entier court signé (16 bits) | 2 octets | Ordre d'octet d'hébergement |
S | Entier court non signé (16 bits) | 2 octets | Ordre d'octet d'hébergement |
n | Entier court non signé (16 bits), commande d'octet de réseau | 2 octets | Big endian |
V | Entier court non signé (16 bits), ordonnance d'octet Little-Endan | 2 octets | Peu endian |
je | Entiers signés (liés à la machine) | 4 octets ou 8 octets | Ordre d'octet d'hébergement |
je | Entiers non signés (liés à la machine) | 4 octets ou 8 octets | Ordre d'octet d'hébergement |
l | Signé entier long (32 bits) | 4 octets | Ordre d'octet d'hébergement |
L | Non signé long (32 bits) | 4 octets | Ordre d'octet d'hébergement |
N | Entier long non signé (32 bits), commande d'octet de réseau | 4 octets | Big endian |
V | Entier long non signé (32 bits), petit ordre d'octet endian | 4 octets | Peu endian |
f | Numéro de point flottant à une seule précision (32 bits) | 4 octets | Ordre d'octet d'hébergement |
d | Numéro de point flottant à double précision (64 bits) | 8 octets | Ordre d'octet d'hébergement |
x | Remplissez les octets (saut 1 octet) | 1 octet | aucun |
X | Rembobiner 1 octet | 1 octet | aucun |
@ | Réglez la position absolue (sauter / retomber sur une position) | variable | aucun |
$ip = "192.168.1.1";
$packed = pack("C4", ...explode('.', $ip));
echo bin2hex($packed); // Sortir c0a80101
$unpacked = unpack("C4", $packed);
echo implode('.', $unpacked); // Sortir 192.168.1.1
$binary = file_get_contents("https://m66.net/example/file.bin");
$header = unpack("a4signature/Nsize", $binary);
print_r($header);
Le code de format peut être modifié avec la quantité, par exemple:
C4 : représente 4 caractères non signés
A10 : chaîne rembourrée avec des espaces représentant 10 caractères
@ 8 : sautez en position 8e octet
Vous pouvez également utiliser * pour lire autant que possible:
$data = unpack("C*", "Hello"); // Lisez tous les octets
PHP's Pack () et Unleback () sont de puissants outils de traitement binaires. Familiariser son code de format et son utilisation peut vous aider à traiter plus de temps sous-jacent les données. Qu'il s'agisse de protocoles d'analyse, de stockage de données structurées ou de construire des protocoles de communication réseau efficaces, ces deux fonctions sont des outils très pratiques.
Bien qu'il existe de nombreux codes de format, la maîtrise des types couramment utilisés (tels que C , N , N , F , D ) peut répondre à la plupart des besoins. Il est recommandé d'utiliser ensemble bin2hex () et hex2bin () en développement, car le débogage est plus pratique.