Aktueller Standort: Startseite> Neueste Artikel> Die Formatcodeliste und Korrespondenz von pack () und pack ()

Die Formatcodeliste und Korrespondenz von pack () und pack ()

M66 2025-05-26

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.

1. Was sind Pack () und pack () ?

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

2. Verwendung von Pack () Funktion

 $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...)

3. Verwendung der Funktion pack ()

 $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)

4. Gemeinsame Formatcode -Vergleichstabelle

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

5. Beispiele für praktische Anwendungen

Netzwerkkommunikation: IP -Adresskonvertierung

 $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

Binärprotokoll -Parsing (wie Lesen von Dateikopfzeilen)

 $binary = file_get_contents("https://m66.net/example/file.bin");
$header = unpack("a4signature/Nsize", $binary);
print_r($header);

6. Mengenmodifikator für den Formatcode

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

7. Zusammenfassung

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.