Aktueller Standort: Startseite> Neueste Artikel> Ergänzende Verwendung von pack () und ord ()

Ergänzende Verwendung von pack () und ord ()

M66 2025-06-06

1. Grundnutzung von Pack ()

Die Funktion pack () verpackt die angegebene Formatzeichenfolge und die Daten in binäre Zeichenfolgen. Zum Beispiel gibt Pack ("C", 65) eine binäre Zeichenfolge zurück, die ein einzelnes Zeichen mit ASCII -Code 65 (d. H. Zeichen "a") enthält. Formatketten werden verwendet, um das Datenlayout zu beschreiben. Gemeinsame Formatcodes umfassen:

  • C : Unsignierte Zeichen (8 Bit, Bereich 0–255)

  • N : Nicht signierte kurze Ganzzahl (16-Bit, Big-Endian Endian)

  • N : unsigned Long Ganzzahl (32-Bit, Big-Endian Endian)

  • H* : hexadezimale Zeichenfolge (hohe Bitpriorität)

Zum Beispiel:

 $bin = pack("C*", 72, 101, 108, 108, 111); // Entsprechende Zeichen "Hello"
echo $bin; // Ausgabe Hello

Dieser Vorgang ist wie das Umwandeln eines Arrays von Ganzzahlen in eine komprimierte binäre Zeichenfolge.


2. Grundnutzung von ord ()

Im Gegensatz zu Pack () wird ord () verwendet, um Zeichen in ihre entsprechenden ASCII- oder Unicode -Werte umzuwandeln. Es ist ein "Decoder" von Pack () und ist sehr nützlich, wenn Daten aus binären Zeichenfolgen extrahiert werden.

Zum Beispiel:

 $char = "A";
$ascii = ord($char); // zurückkehren 65

Diese Funktion ist sehr geeignet, um mit Pack () zusammenzuarbeiten, um das Originaldaten -Byte -Byte aus der codierten Zeichenfolge wiederherzustellen.


3.. Komplementäre Beziehung zwischen den beiden

Verwenden Sie Pack () , wenn Sie Daten in Binär codieren, und verwenden Sie ord (), wenn Sie sie aus binär extrahieren. Dies stellt eine ergänzende Beziehung zwischen den beiden dar. Zum Beispiel können wir zuerst eine Abfolge von Zahlen verpacken und sie dann Byte -Byte analysieren:

 $data = [77, 54, 54];
$bin = pack("C*", ...$data);

// Lesen Sie jedes Byte
for ($i = 0; $i < strlen($bin); $i++) {
    echo ord($bin[$i]) . "\n"; // Ausgabe 77, 54, 54
}

In diesem Code verwenden wir Pack () , um das Array [77, 54, 54] in eine Drei-Byte-binäre Zeichenfolge umzuwandeln, während ord () es dem ursprünglichen numerischen Wert per Byte wiederherstellt.

Diese Technik ist besonders nützlich, wenn Binärnachrichten für bestimmte Protokolle konstruieren. Konstruieren Sie beispielsweise ein kurzes Linkanforderungspaket, das ähnelt wie:

 $url_id = 1234;
$payload = pack("N", $url_id);
file_put_contents("http://m66.net/api/store", $payload);

Nachdem der Server diese 4-Byte-Daten erhalten hat, kann er wie folgt analysiert werden:

 $data = file_get_contents("php://input");
$url_id = unpack("N", $data)[1];

Hier sind Pack ("n", $ url_id) und pack ("n", $ data) genau ein Paar komplementärer Operationen.


4. Beispiele für praktische Szenarien

Wenn Sie beispielsweise eine Art leichter Verschlüsselung oder benutzerdefiniertes Übertragungsprotokoll implementieren, müssen Sie möglicherweise Textinformationen in numerische Werte Bytes umwandeln, und führen Sie eine gewisse Versatzverarbeitung durch, bevor Sie sie in Binäreinbuden einkapseln:

 $text = "Hi!";
$encrypted = "";
for ($i = 0; $i < strlen($text); $i++) {
    $encrypted .= pack("C", ord($text[$i]) + 1);
}
// Entschlüsseln
$decrypted = "";
for ($i = 0; $i < strlen($encrypted); $i++) {
    $decrypted .= chr(ord($encrypted[$i]) - 1);
}
echo $decrypted; // Ausgabe Hi!

In diesem Beispiel verwandelt ORD () Zeichen in Zahlen, Pack () in binäre, und die Entschlüsselung wird mit ord () wiederhergestellt und dann ausgeglichen.