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.
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.
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) |
<?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.
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.
<?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;
?>
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.