In PHP ist die Funktion Pack () ein leistungsstarkes Tool, mit dem Daten im angegebenen Format in binäre Zeichenfolgen packen können. In Szenarien wie Datenübertragung, Dateischreiben und Netzwerkprotokollimplementierung wird häufig verwendet. Dieser Artikel konzentriert sich darauf, wie Pack ("c*") Arrays verwendet und ihre Verwendung, praktische Techniken und gemeinsame Anwendungen analysiert.
Die grundlegende Syntax der Funktion pack () lautet wie folgt:
string pack ( string $format , mixed ...$values )
Wobei $ format das Verpackungsformat der Daten angibt, während "C" den Parameter in nicht signierte Zeichen konvertieren (d. H. 1 Byte, Bereich 0 ~ 255). "C*" bedeutet, mehrere Werte im nichtsignierten Zeichenformat zu verpacken, das für die Codierung jedes Elements im Array als einzelnes Byte geeignet ist.
Zum Beispiel:
$data = [65, 66, 67];
$packed = pack("C*", ...$data);
echo $packed; // Ausgabe ABC
In diesem Code entspricht 65 dem ASCII -Zeichen A , 66 B , und 67 entspricht C , sodass die endgültige Ausgabe die Zeichenfolge "ABC" ist.
Um eine Reihe von Zahlen in Binärdaten über Pack ("C*") in die allgemeinen Schritte umzuwandeln, sind die allgemeinen Schritte wie folgt:
Bereiten Sie ein Array vor, das numerische Werte enthält, die Werte im Array sollten zwischen 0 und 255 liegen.
Geben Sie das Array als mehrere Parameter an Pack ("C*") unter Verwendung des Parameterpackings ( ... ) über ("c*").
Pack () konvertiert jede Nummer in ein Byte und gibt eine binäre Zeichenfolge zurück.
Beispielcode:
<?php
$array = [72, 101, 108, 108, 111]; // entsprechen "Hello"
$binary = pack("C*", ...$array);
echo $binary; // Ausgabe: Hello
?>
Hinweis: Pack () gibt eine binäre Zeichenfolge zurück und kann möglicherweise nicht direkt mit Echo ausgegeben werden. Wenn Sie es visuell anzeigen möchten, können Sie die Funktion bin2hex () verwenden:
echo bin2hex($binary); // 48656c6c6f
Wenn das Array leer ist, meldet das Aufrufen von Pack ("C*", ... $ Array) einen Fehler. Es wird empfohlen, zuerst zu beurteilen:
if (!empty($array)) {
$binary = pack("C*", ...$array);
} else {
$binary = '';
}
Pack ("C*") erfordert, dass das Element eine ganze Zahl von 0 ~ 255 ist, ansonsten treten unerwartete Ergebnisse auf. Sie können Array_Map verwenden, um den Umfang zuerst zu begrenzen:
$array = array_map(function($v) {
return $v & 0xFF; // Nur die niedrigsten behalten8Bisschen
}, $array);
Verpackte Daten werden häufig in benutzerdefinierten Netzwerkprotokollen verwendet und können Integer -Arrays in Byte -Streams umwandeln und dann an Remote -Server senden.
Beispiel:
$data = [1, 2, 3, 4];
$packet = pack("C*", ...$data);
$socket = stream_socket_client("tcp://m66.net:1234");
fwrite($socket, $packet);
fclose($socket);
Manchmal ist es notwendig, binäre Formatdateien wie Bildheaderinformationen, Audio- und Videodateien usw. zu schreiben.
$header = [0x89, 0x50, 0x4E, 0x47]; // PNGDateisignatur
file_put_contents('file.png', pack("C*", ...$header));
Wenn ein benutzerdefiniertes Protokoll mehrere Felder sendet, ist es sehr häufig, Zahlen in Byte -Streams umzuwandeln.
Pack ("C*") kann Byte -Arrays in Zeichenfolgen umwandeln, während das Auspacken ("C*", $ str) inverse Vorgänge implementieren kann, wodurch es einfacher ist, zu codieren und zu dekodieren.
Pack ("C*") wird verwendet, um eine Reihe von Ganzzahlen in Byte -Format in binäre Zeichenfolgen zu packen.
Das Array -Element muss zwischen 0 und 255 liegen, und das leere Array sollte zuerst überprüft werden.
Geeignet für verschiedene Szenarien wie Netzwerkübertragung, Dateischreiben und Protokollentwicklung.
Es verwendet Auspack ("C*"), um eine Zwei-Wege-Konvertierung zu erreichen, wodurch es flexibler ist, Byte-Daten zu verarbeiten.
Durch die rationale Verwendung von Pack ("C*") können Sie Binärdaten effizient verarbeiten und Php in Dateninteraktion auf niedriger Ebene leistungsfähiger machen.