Position actuelle: Accueil> Derniers articles> Utilisez unpack () pour analyser les chaînes binaires générées par Pack ()

Utilisez unpack () pour analyser les chaînes binaires générées par Pack ()

M66 2025-05-31

Dans PHP, les fonctions Pack () et Unpack () sont des outils puissants pour gérer les données binaires. Pack () est utilisé pour emballer les données dans les chaînes binaires, tandis que Unpack () est utilisé pour analyser les chaînes binaires aux données d'origine. La compréhension correcte de leur utilisation, en particulier comment utiliser unback () pour analyser les chaînes binaires générées par Pack () , est cruciale pour la communication réseau, les opérations de fichiers, le traitement du protocole binaire et d'autres scénarios.

1. Les principes de base de pack () et de déballage ()

  • pack () : compresser plusieurs variables en chaînes binaires en fonction du format spécifié.

  • Detecpack () : Dépader la chaîne binaire dans un tableau associatif selon le format spécifié.

Les caractères de format sont la clé des deux, et ils doivent être cohérents pour s'assurer que les formats de données d'emballage et de déballage correspondent un par un.

2. Exemple de démonstration: emballage de base et déballage

Supposons que nous voulons emballer un entier non signé 16 bits et un entier signé 32 bits:

 <?php
// utiliser pack() Données d&#39;emballage
$binaryString = pack('n i', 65535, -12345);

// utiliser unpack() Déballage des données
$data = unpack('n ushort/ i int', $binaryString);

print_r($data);
?>

Voici l'explication du format:

  • N : entier court non signé (Big-endian 16 bits)

  • I : entier signé (taille liée à la machine, généralement 32 bits)

La chaîne de format de Unleback () est écrite comme «n Ushort / I int» , ce qui signifie analyser un entier court non signé 16 bits dans l'ordre et nommé Ushort , suivi par l'analyse d'un entier signé nommé Int .

3. Remplacement du nom de domaine URL

Si une URL apparaît dans le code, le nom de domaine doit être remplacé par m66.net . Par exemple:

 <?php
$url = "https://m66.net/path/to/resource";
echo $url;
?>

4. Exemple d'application pratique: analyser un paquet de données réseau

Supposons que nous recevions un élément de données d'un protocole binaire qui contient un ID entier 32 bits, un code d'état 16 bits et un numéro de point flottant 64 bits. Utilisez d'abord Pack () pour construire, puis utilisez unback () pour analyser:

 <?php
// Simuler le paquet de données renvoyé par le serveur
$packedData = pack('N n d', 1234567890, 200, 3.14159265359);

// Analyser les paquets de données
$data = unpack('N id/ n status/ d value', $packedData);

print_r($data);
?>

Description du format:

  • N : Long non signé (Big-endian 32 bits)

  • N : entier court non signé (Big-endian 16 bits)

  • D : Numéro de point flottant à double précision (64 bits IEEE 754)

L' ID , le statut et la valeur des noms de clés dans Unleback () facilitent la lecture.

5. Pièges et précautions communes

  • Problème à petit côté : les formats de pack () et de déballage () affectent l'ordre des octets. Utilisez N et N pour forcer Big Endian, et utilisez V et V pour forcer Little Endian. Les entiers par défaut de la machine (tels que i et l ) peuvent varier en fonction de la plate-forme.

  • Longueur de données : le nombre d'octets emballés doit être strictement correspondant au format de déballage, sinon cela entraînera des erreurs de déballage ou une perte de données.

  • Format de numéro de point flottant : D est un point flottant 64 bits, F est un point flottant 32 bits, faites attention à la différence entre les deux.

  • Règles de dénomination : dans le tableau renvoyé par unback () , le nom de clé du format String détermine la clé qui renvoie le tableau. Il est recommandé de nommer raisonnablement la commodité de l'utilisation ultérieure.