Aktueller Standort: Startseite> Neueste Artikel> Verwenden Sie Pack (), um die Serialisierung von Binärdaten zu implementieren

Verwenden Sie Pack (), um die Serialisierung von Binärdaten zu implementieren

M66 2025-06-05

In PHP wird die Funktion pack () verwendet, um Daten im angegebenen Format in binäre Zeichenfolgen zu packen. Dies ist nützlich, wenn Sie sich mit Netzwerkübertragungen, Dateien und Interaktionen mit C oder anderen Sprachen auf niedriger Ebene befassen. In diesem Artikel wird die Verwendung der Pack () -Funktion ausführlich erläutert und Beispiele kombinieren, um zu veranschaulichen, wie Daten in ein Binärformat verpackt werden.

Pack () Funktion Einführung

Die grundlegende Syntax von pack () lautet wie folgt:

 string pack(string $format, mixed $values, mixed ...$values)
  • $ format : Gibt das Format der Daten an, das aus einem oder mehreren Formatcodes besteht.

  • $ Werte : Der zu verpackte Wert kann mehrere Parameter sein.

Der Rückgabewert ist eine binäre Zeichenfolge, die im angegebenen Format verpackt ist.

Gemeinsame Formatcodes

Formatcode beschreiben Beispiel
A NUL Character gefüllte Zeichenfolge Pack ('A4', 'ABC')
A Space gefüllte Schnur Pack ('A4', 'ABC')
C Signierte Zeichen (1 Byte) Pack ('C', 65)
C Nicht signierte Zeichen (1 Byte) Pack ('C', 65)
S Signierte kurze Ganzzahl (2 Bytes) Pack ('s', 1234)
S Nicht signierte kurze Ganzzahl (2 Bytes) Pack ('s', 1234)
ich Signierte Ganzzahl (Maschinenwortlänge) Pack ('I', 123456)
ICH Unsigned Ganzzahl (Maschinenwortlänge) Pack ('I', 123456)
l Signierte lange ganze Zahl (4 Bytes) Pack ('L', 123456)
L Nicht signierte lange ganze Zahl (4 Bytes) Pack ('L', 123456)
F Schwimmende Punktzahl (4 Bytes) Pack ('F', 3.14)
D Doppelte Präzision schwimmende Punktzahl (8 Bytes) Pack ('D', 3.14)
N Nicht signierte kurze Ganzzahl (16-Bit-Big-Endian Endian) Pack ('n', 1234)
N Nicht signierte lange Ganzzahl (32-Bit-Big-Endian Endian) Pack ('n', 1234)

Beispielanalyse

1. Verpackungszeichenfolgen und Ganzzahlen

 <?php
// Packen Sie eine Länge ein4String und eine32Ein bisschen unsigned Big Endian Ganzzahl
$packed = pack('a4N', 'test', 123456789);
echo bin2hex($packed);
?>

Hier bedeutet 'A4' , eine Länge 4 4 ​​zu packen. Der unzureichende Teil ist mit NUL -Zeichen gefüllt. 'N' bedeutet, eine 32-Bit-Ganzzahl mit Big-Endian zu packen. bin2hex () wandelt Binärinhalte für eine einfache Anzeige in Hexadezimal um.

2. Verwenden Sie Pack (), um Netzwerkprotokollpakete zu erstellen

Nehmen wir an, Sie müssen ein einfaches Netzwerkpaket erstellen, einschließlich des Befehlstyps (1 Byte) und der Datenlänge (4 Bytes Big Endian) und dann der Datenbehörde:

 <?php
$command = 1;               // Befehlstyp,1Byte
$data = "Hello, m66.net!";  // Datenkörper
$length = strlen($data);    // Datenlänge

// 打包Befehlstyp和Datenlänge
$header = pack('CN', $command, $length);

// Spleißen vollständige Datenpakete
$packet = $header . $data;

// Hexadezimale Darstellung des Ausgangspakets
echo bin2hex($packet);
?>

Im obigen Code "C" -Paket-Befehlstyp (1 Byte Unsigned Integer) und 'n' Paketdatenlänge (4 Byte Big-Endian Integer). Datenkörper werden so gespleißt, wie es ist.

3. Beispiel für die Verwendung von Pack () und pack (), um sich gegenseitig umzuwandeln

 <?php
$number = 65535;
$packed = pack('n', $number);  // 按大端Byte序打包为16Unsigned Ganzzahl
echo 'Packed data: ' . bin2hex($packed) . PHP_EOL;

$unpacked = unpack('nvalue', $packed);  // Auspacken
echo 'Unpacked value: ' . $unpacked['value'] . PHP_EOL;
?>

Zusammenfassung

Pack () ist ein leistungsstarkes Tool zur Manipulation binärer Daten, insbesondere für die Netzwerkprogrammierung und die zugrunde liegende Datenverarbeitung. Durch die Verwendung von Formatcode können Sie die Byteanordnung und die Art der Daten genau steuern.