In PHP, Pack () und pack () werden häufig zur Verarbeitung von Binärdaten verwendet und eignen sich besonders für die Verwendung in Szenarien wie Netzwerkkommunikation, Lesen und Schreiben von Dateien, Datencodierung usw., bei denen eine präzise Steuerung von Bytes erforderlich ist. In diesem Artikel wird die Verwendung dieser beiden Funktionen im Detail erläutert und eine vollständige Formatcode -Vergleichstabelle angeschlossen, damit Sie binäre Daten effizienter verarbeiten können.
pack () : Paketdaten in eine binäre Zeichenfolge.
pack () : Die binäre Zeichenfolge in ein PHP -Array auspacken.
Beide verwenden Formatcodes, um die Struktur der Daten zu definieren, die bestimmen, wie die Daten codiert/dekodiert werden.
$data = pack("C*", 72, 101, 108, 108, 111); // Wille ASCII Code in Zeichenfolge konvertieren "Hello"
echo $data; // Ausgabe: Hello
Grammatik:
string pack(string $format, mixed $values...)
$data = "Hello";
$result = unpack("C*", $data);
print_r($result);
Ausgabe:
Array
(
[1] => 72
[2] => 101
[3] => 108
[4] => 108
[5] => 111
)
Grammatik:
array unpack(string $format, string $data, int $offset = 0)
Formatcode | veranschaulichen | Bytelänge | Großes und kleines Ende |
---|---|---|---|
A | NUL füllen Sie die Zeichenfolge (nicht NUL entfernt) | Länge angeben | keiner |
A | Leerzeichen füllen Saiten (die Schwanzräume werden entfernt) | Länge angeben | keiner |
H | Hexadezimalstring, jedes Zeichen repräsentiert 4 Bits | Alle zwei Ziffern = 1 Byte | keiner |
H | CAPS Hexadezimal, jeder Charakter zeigt 4 Bit an | Alle zwei Ziffern = 1 Byte | keiner |
C | Signierte Zeichen (8 Bit) | 1 Byte | keiner |
C | Nicht signierte Zeichen (8 Bit) | 1 Byte | keiner |
S | Signierte kurze Ganzzahl (16 Bit) | 2 Bytes | Host -Byte -Bestellung |
S | Nicht signierte kurze Ganzzahl (16-Bit) | 2 Bytes | Host -Byte -Bestellung |
N | Nicht signierte kurze Ganzzahl (16-Bit), Netzwerk-Byte-Reihenfolge | 2 Bytes | Big Endian |
v | Nicht signierte kurze Ganzzahl (16-Bit), Little-Endian Byte Order | 2 Bytes | Kleiner Endian |
ich | Signierte Ganzzahlen (maschinell bezogen) | 4 Bytes oder 8 Bytes | Host -Byte -Bestellung |
ICH | Nicht signierte Ganzzahlen (maschinell bezogen) | 4 Bytes oder 8 Bytes | Host -Byte -Bestellung |
l | Signierte lange ganze Zahl (32 Bit) | 4 Bytes | Host -Byte -Bestellung |
L | Nicht signiert lang (32-Bit) | 4 Bytes | Host -Byte -Bestellung |
N | Nicht signierte lange Ganzzahl (32 Bit), Netzwerk -Byte -Bestellung | 4 Bytes | Big Endian |
V | Nicht signierte lange Ganzzahl (32 Bit), kleine endianische Byte -Ordnung | 4 Bytes | Kleiner Endian |
F | Einschwingspunktnummer mit einer Präzision (32 Bit) | 4 Bytes | Host -Byte -Bestellung |
D | Doppelte Präzision schwimmende Punktzahl (64 Bit) | 8 Bytes | Host -Byte -Bestellung |
X | Füllen Sie Bytes aus (überspringen Sie 1 Byte) | 1 Byte | keiner |
X | Rückspulen 1 Byte | 1 Byte | keiner |
@ | Stellen Sie die absolute Position ein (überspringen/fallen in eine Position zurück) | Variable | keiner |
$ip = "192.168.1.1";
$packed = pack("C4", ...explode('.', $ip));
echo bin2hex($packed); // Ausgabe c0a80101
$unpacked = unpack("C4", $packed);
echo implode('.', $unpacked); // Ausgabe 192.168.1.1
$binary = file_get_contents("https://m66.net/example/file.bin");
$header = unpack("a4signature/Nsize", $binary);
print_r($header);
Der Formatcode kann beispielsweise mit Menge geändert werden:
C4 : Repräsentiert 4 nicht signierte Zeichen
A10 : gepolsterte Zeichenfolge mit Leerzeichen, die 10 Zeichen darstellen
@8 : Springe zur 8. Byte -Position
Sie können auch * so viel wie möglich lesen:
$data = unpack("C*", "Hello"); // Lesen Sie alle Bytes
PHPs Pack () und pack () sind leistungsstarke Binärverarbeitungswerkzeuge. Wenn Sie mit seinem Formatcode und seiner Nutzung vertraut sind, können Sie die zugrunde liegenden Daten flexibler verarbeiten. Unabhängig davon, ob es sich um Parsenprotokolle, das Speichern strukturierter Daten oder das Erstellen effizienter Netzkommunikationsprotokolle handelt, diese beiden Funktionen sind sehr praktische Tools.
Obwohl es viele Formatcodes gibt, kann das Beherrschen der häufig verwendeten Typen (z. B. C , N , N , F , D ) die meisten Anforderungen erfüllen. Es wird empfohlen, bin2hex () und hex2bin () zusammen in der Entwicklung zum Debuggen bequemer zu werden.