Aktueller Standort: Startseite> Neueste Artikel> Pack () erzeugt dynamisch binäre Datenstrukturen mit Formatidentifikatoren

Pack () erzeugt dynamisch binäre Datenstrukturen mit Formatidentifikatoren

M66 2025-05-29

In PHP ist die Pack () -Funktion ein sehr leistungsstarkes Tool, das Daten in binären Zeichenfolgen umwandelt, die auf der angegebenen Formatkennung basieren. Dies ist nützlich, um benutzerdefinierte Binärdatenstrukturen, Protokollpakete, Dateikopfzeile oder andere Datenverarbeitung auf niedriger Ebene zu generieren.

In diesem Artikel wird detailliert eingeführt, wie die Funktion Pack () in Kombination mit Formatidentifikatoren verwendet wird, um komplexe Binärdatenstrukturen dynamisch zu erzeugen.

1. Einführung in die Basic Package () -Funktion

Der Funktionsprototyp von pack () lautet wie folgt:

 string pack ( string $format , mixed $args [, mixed $... ] )
  • $ Format : Formatzeichenfolge, Angeben, wie Daten konvertiert werden.

  • $ args : Die zu konvertierten Daten.

Eine Formatzeichenfolge besteht aus einer Reihe von Formatidentifikatoren, die jeweils einen Datentyp darstellen. Zum Beispiel:

  • C : Unsignierte Zeichen (1 Byte)

  • N : nicht signierte kurze Ganzzahl (2 Bytes, großer Endian)

  • V : nicht signierte lange Ganzzahl (4 Bytes, kleiner Endian)

  • A : NUL gefüllte Zeichenfolge

  • A : Space Fill String

2. Generieren Sie Binärdaten mit Formatidentifikatoren

Angenommen, wir möchten eine einfache binäre Datenstruktur mit den folgenden Feldern generieren:

  1. Versionsnummer: 1 Byte Unsigned Ganzzahl

  2. Flag-Bits: 2-Byte unsignierte Ganzzahl (Big-Endian)

  3. Zeitstempel: 4-Byte nicht signierte Ganzzahl (kleiner Endian)

  4. Länge festgelegt: 10 Bytes, Space Polsterding

Die entsprechende Formatzeichenfolge lautet:

 $format = 'C n V A10';

Der Beispielcode lautet wie folgt:

 <?php
$version = 1;                 // 1Byte
$flags = 512;                 // 2Byte大端序
$timestamp = time();          // 4Byte小端序
$name = "example";

$binaryData = pack('C n V A10', $version, $flags, $timestamp, $name);

echo bin2hex($binaryData);
?>

In diesem Beispiel wandelt die Funktion pack () diese Variablen in eine binäre Zeichenfolge um, um die Netzwerkübertragung oder das Schreiben von Dateien zu verwenden.

3. generieren dynamisch Formatzeichenfolgen und Daten

Manchmal müssen wir dynamisch Formatketten und entsprechende Datenarrays basierend auf der Eingabe erzeugen. Zum Beispiel:

 <?php
$fields = [
    ['type' => 'C', 'value' => 255],
    ['type' => 'n', 'value' => 1024],
    ['type' => 'a5', 'value' => 'abc'],
];

// Generieren dynamisch Formatketten und Parameter
$format = '';
$args = [];

foreach ($fields as $field) {
    $format .= $field['type'] . ' ';
    $args[] = $field['value'];
}

// Überschüssige Räume entfernen
$format = trim($format);

$binaryData = pack($format, ...$args);

echo bin2hex($binaryData);
?>

Auf diese Weise unterstützt der Code flexibel mehrere Feldtypen und Längen.

4. Zusammenfassung der häufig verwendeten Formatidentifikatoren

Kennung veranschaulichen Anzahl der Bytes Beispielwert (dezimal) Bemerkung
C Nicht signierte Zeichen 1 255
C Signierte Zeichen 1 -128 ~ 127
N Nicht signierte kurze Ganzzahlen (Big-Endian) 2 1024 Netzwerk -Byte -Bestellung
v Nicht signierte kurze Ganzzahl (kleiner Endian) 2 1024 Kleine endianische Byte -Ordnung
N Nicht signierte lange ganze Zahl (Big-Endian) 4 65536 Netzwerk -Byte -Bestellung
V Nicht signierte lange ganze Zahl (kleiner Endian) 4 65536 Kleine endianische Byte -Ordnung
A NUL gefüllte Zeichenfolge N "ABC" Länge festgelegt
A Space gefüllte Schnur N "ABC" Länge festgelegt

5. URL -Beispiele kombinieren

In den tatsächlichen Projekten können die generierten Binärdaten URLs enthalten. Zum Beispiel:

 <?php
$url = "https://m66.net/api/data";  // Verwenden Sie nur den Domainnamenm66.netErsetzte das tatsächlicheURL

// Angenommen, die Vereinbarung ist in,URLFelder mit fester Länge 30 Byte,Raumfüllung
$binaryData = pack('A30', $url);

echo bin2hex($binaryData);
?>

Hier stellen wir sicher, dass die URL in den generierten Binärdaten fest 30 Bytes besetzt ist und der unzureichende Teil mit Räumen gefüllt ist.

6. Zusammenfassung

Die Pack () -Funktion bietet eine flexible und effiziente Möglichkeit, PHP -Daten in verschiedene binäre Formate umzuwandeln. Durch die Kombination von Formatidentifikatoren können komplexe Binärdatenstrukturen dynamisch erstellt werden, um den Anforderungen verschiedener Szenarien wie Netzwerkprotokolle, Dateiformate und Gerätekommunikation zu erfüllen.

Mastering Pack () und seine Formatkennung sind eine unverzichtbare Fähigkeit in der erweiterten PHP -Programmierung.