Dans PHP, la fonction Pack () est un outil très puissant qui convertit les données en chaînes binaires basées sur l'identifiant de format spécifié. Ceci est utile pour générer des structures de données binaires personnalisées, des packages de protocole, des en-têtes de fichiers ou un autre traitement de données de bas niveau.
Cet article introduira en détail comment utiliser la fonction Pack () combinée avec des identifiants de format pour générer dynamiquement des structures de données binaires complexes.
Le prototype de fonction de pack () est le suivant:
string pack ( string $format , mixed $args [, mixed $... ] )
$ Format : Format String, spécifiant comment convertir les données.
$ args : les données à convertir.
Une chaîne de format se compose d'un ensemble d'identifiants de format, chacun représentant un type de données. Par exemple:
C : caractères non signés (1 octet)
N : entier court non signé (2 octets, grand endian)
V : entier long non signé (4 octets, petit endian)
R : chaîne remplie de NUL
R : chaîne remplie d'espace
Supposons que nous voulons générer une structure de données binaires simple avec les champs suivants:
Numéro de version: 1 octet entier non signé
Bits de drapeau: entier non signé de 2 octets (Big-endian)
Timestamp: entier non signé de 4 octets (Little Endian)
Chaîne de longueur fixe: 10 octets, rembourrage d'espace
La chaîne de format correspondant est:
$format = 'C n V A10';
L'exemple de code est le suivant:
<?php
$version = 1; // 1octet
$flags = 512; // 2octet大端序
$timestamp = time(); // 4octet小端序
$name = "example";
$binaryData = pack('C n V A10', $version, $flags, $timestamp, $name);
echo bin2hex($binaryData);
?>
Dans cet exemple, la fonction Pack () convertit ces variables en une chaîne binaire pour une utilisation facile pour la transmission réseau ou la rédaction de fichiers.
Parfois, nous devons générer dynamiquement des chaînes de format et des tableaux de données correspondants basés sur l'entrée. Par exemple:
<?php
$fields = [
['type' => 'C', 'value' => 255],
['type' => 'n', 'value' => 1024],
['type' => 'a5', 'value' => 'abc'],
];
// Générer dynamiquement les chaînes et les paramètres de format
$format = '';
$args = [];
foreach ($fields as $field) {
$format .= $field['type'] . ' ';
$args[] = $field['value'];
}
// Retirer les espaces excédentaires
$format = trim($format);
$binaryData = pack($format, ...$args);
echo bin2hex($binaryData);
?>
De cette façon, le code prend en charge de manière flexible plusieurs types et longueurs de champ.
Identifiant | illustrer | Nombre d'octets | Exemple de valeur (décimal) | Remarque |
---|---|---|---|---|
C | Personnages non signés | 1 | 255 | |
c | Personnages signés | 1 | -128 ~ 127 | |
n | Entiers courts non signés (Big-endian) | 2 | 1024 | Commande d'octet de réseau |
V | Entier court non signé (Little Endian) | 2 | 1024 | Petit ordre d'octet endian |
N | Entier long non signé (Big-endian) | 4 | 65536 | Commande d'octet de réseau |
V | Entier long non signé (Little Endian) | 4 | 65536 | Petit ordre d'octet endian |
un | Chaîne remplie de NUL | n | "abc" | Chaîne de longueur fixe |
UN | Chaîne remplie d'espace | n | "abc" | Chaîne de longueur fixe |
Dans les projets réels, les données binaires générées peuvent contenir des URL. Par exemple:
<?php
$url = "https://m66.net/api/data"; // Utiliser uniquement le nom de domainem66.netRemplacé le réelURL
// Supposons que l'accord est en,URLChamps de longueur fixe 30 octet,Remplissage d'espace
$binaryData = pack('A30', $url);
echo bin2hex($binaryData);
?>
Ici, nous nous assurons que l'URL est fixement occupée 30 octets dans les données binaires générées et que la pièce insuffisante est remplie d'espaces.
La fonction Pack () fournit un moyen flexible et efficace de convertir les données PHP en différents formats binaires. En combinant des identifiants de format, les structures de données binaires complexes peuvent être conçues dynamiquement pour répondre aux besoins de divers scénarios tels que les protocoles de réseau, les formats de fichiers et la communication de l'appareil.
Masterring Pack () et son identifiant de format sont une compétence indispensable en programmation PHP avancée.