Position actuelle: Accueil> Derniers articles> Pack () génère dynamiquement des structures de données binaires avec des identifiants de format

Pack () génère dynamiquement des structures de données binaires avec des identifiants de format

M66 2025-05-29

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.

1. Introduction à la fonction Basic Package ()

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

2. Générer des données binaires avec des identifiants de format

Supposons que nous voulons générer une structure de données binaires simple avec les champs suivants:

  1. Numéro de version: 1 octet entier non signé

  2. Bits de drapeau: entier non signé de 2 octets (Big-endian)

  3. Timestamp: entier non signé de 4 octets (Little Endian)

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

3. Générer dynamiquement les chaînes de format et les données

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.

4. Résumé des identifiants de format couramment utilisés

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

5. combinant des exemples d'URL

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&#39;accord est en,URLChamps de longueur fixe 30 octet,Remplissage d&#39;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.

6. Résumé

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.