Position actuelle: Accueil> Derniers articles> La liste de code de format et la correspondance de pack () et unback ()

La liste de code de format et la correspondance de pack () et unback ()

M66 2025-05-26

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.

1. Que sont Pack () et Unback () ?

  • 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.

2. Utilisation de la fonction Pack ()

 $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...)

3. Utilisation de la fonction unpack ()

 $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)

4. Tableau de comparaison de code de format commun

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

5. Exemples d'application pratiques

Communication réseau: conversion d'adresse IP

 $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

Analyse du protocole binaire (comme la lecture des en-têtes de fichiers)

 $binary = file_get_contents("https://m66.net/example/file.bin");
$header = unpack("a4signature/Nsize", $binary);
print_r($header);

6. Modificateur de quantité pour le code de format

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

7. Résumé

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.