


Eine kurze Diskussion über die Verwendung von Pack und Unpack in PHP
Dieses Mal werde ich Ihnen ausführlich erklären, wie Sie Pack und Unpack in PHP verwenden und welche Vorsichtsmaßnahmen bei der Verwendung von Pack und Unpack in PHP gelten. Hier sind praktische Fälle, schauen wir uns das an .
pack
string pack ( string $format [, mixed $args [, mixed $... ]] )
Diese Funktion wird verwendet, um die entsprechenden Parameter ($args) in einen binären String zu packen.
Der erste Parameter $format hat die folgenden Optionen (es gibt viele optionale Parameter und einige häufig verwendete werden später erklärt):
Code | Beschreibung | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
a | Füllen Sie die Zeichenfolge mit NUL-Bytes|||||||||||||||||||||||||||||||||||||||||||||||||||||||
A | Füllen Sie die Zeichenfolge mit SPACE (Leerzeichen) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
Hexadezimale Zeichenfolge, niederwertiges Bit zuerst | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
H | Hexadezimale Zeichenfolge, hochwertiges Bit zuerst | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
c | Zeichen mit Vorzeichen | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
C | Zeichen ohne Vorzeichen | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
s | Signed short (16 Bits, Host-Byte-Reihenfolge) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
S | Unsigned short (16-Bit, Host-Byte-Reihenfolge) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
n | Unsigned Short Integer-Typ (16 Bit, Big-Endian-Byte-Reihenfolge) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
v | Vorzeichenloser kurzer Ganzzahltyp (16 Bit, Little-Endian-Bytereihenfolge) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
i | Vorzeichenbehaftete Ganzzahl (maschinenabhängige Größen-Byte-Reihenfolge)|||||||||||||||||||||||||||||||||||||||||||||||||||||||
I | Vorzeichenlose Ganzzahl (maschinenabhängige Größen-Endianness) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
l | Signed Long (32-Bit, Host-Endianness) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
L | Unsigned Long Integer (32 Bit, Host-Endianness) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
N | Unsigned long (32-Bit, Big-Endian) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
V | Keine vorzeichenbehaftete lange Ganzzahl (32 Bit, Little Endian) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
q | vorzeichenbehaftete lange Ganzzahl (64 Bits, Host-Endian) ) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
Q | Unsigned Long Integer (64-Bit, Host-Byte-Reihenfolge) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
Unsigned Long Integer (64-Bit, Big Endian) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
P | Unsigned Long Integer (64 Bits, Little Endian) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
f | Einfache Genauigkeit Gleitkomma
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
d | Gleitkommatyp mit doppelter Genauigkeit (maschinenabhängige Größe) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
x | NUL-Bytes | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
X td> | Ein Byte zurücksetzen | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
Z | String-Lücken mit NUL-Bytes füllen (neu in PHP 5.5) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
@ td> | NUL-Auffüllen zur absoluten Position |
这么多参数看下来,我第一次是真心懵逼了,大部分说明都很好理解,但是其中的主机、大端、小端等字节序是什么鬼呢?接下里的内容比较枯燥,但必须理解才行,坚持吧。
字节序是什么?
就是字节的顺序,说白了就是多字节数据的存放顺序(一个字节显然不需要顺序)。
比如A和B分别对应的二进制表示为0100 0001、0100 0010。对于储存字符串AB,我们可以0100 0001 0100 0010也可以0100 0010 0100 0001,这个顺序就是所谓的字节序。
高/低位字节
比如字符串AB,左高右低(我们正常的阅读顺序),A为高字节,B为低字节
高/低地址
假设0x123456是按从高位到底位的顺序储存,内存中是这样存放的:
高地址 -> 低地址
12 -> 34 -> 56
大端字节序(网络字节序)
大端就是将高位字节放到内存的低地址端,低位字节放到高地址端。网络传输中(比如TCP/IP)低地址端(高位字节)放在流的开始,对于2个字节的字符串(AB),传输顺序为:A(0-7bit)、B(8-15bit)。
那么小端字节序自然和大端相反。
主机字节序
表示当年机器的字节序(也就是网络字节序是确定的,而主机字节序是依机器确定的),一般为小端字节序。
a和A(打包字符串,用NUL或者空格填充)
$string = pack('a6', 'china'); var_dump($string); //输出结果: string(6) "china",最后一个字节是不可见的NUL echo ord($string[5]); //输出结果: 0(ASCII码中0对应的就是nul) //A同理 $string = pack('A6', 'china'); var_dump($string); //输出结果: string(6) "china ",最后一个字节是空格 echo ord($string[5]); //输出结果: 32(ASCII码中32对应的就是空格)
附赠ASCII表一张(linux/unix下可以使用man ascii查看)
h和H
$string = pack('H3', 281); var_dump($string); //输出结果: string(2) "(" for($i=0;$i<strlen($string);$i++) { echo ord($string[$i]) . PHP_EOL; } //输出结果: 40 16
h和H需要特殊说明一下,它们是将对应的参数看做十六进制字符然后打包。什么意思呢?比如上面的281,打包前会将281转换为0x281,因为十六进制的一位对应二进制的四位,上面的0x281只有1.5个字节,后面会默认补0变成0x2810,0x28对应的十进制为40((),0x10对应的十进制为16(dle不可见字符),懂了吧?不懂可以给我留言。。
c和C
$string = pack('c3', 67, 68, -1); var_dump($string); //输出:string(3) "CD�" for($i=0;$i<strlen($string);$i++) { echo ord($string[$i]) . PHP_EOL; } //输出: 67 68 225
最后输出本能应该觉得是67 68 -1
ord获取的是字符的ASCII码(范围0-255),这时-1(0000 0001)对应的字符将以补码的形式输出也就是255(1111 1110 + 0000 0001 = 1111 1111)
整型相关
所有的整型类型使用方法完全一样,主要注意它们的位和字节序就可以了,下面以L作为例子展示
$string = pack('L', 123456789); var_dump($string); //输出:string(4) "�[" for($i=0;$i<strlen($string);$i++) { echo ord($string[$i]) . PHP_EOL; } //输出: 21 205 91 7
f和d
$string = pack('f', 12345.123); var_dump($string); //输出:string(4) "~�@F" var_dump(unpack('f', $string)); //这里提前用到了unpack,后面会讲解 //输出:float(12345.123046875)
f和d是针对浮点数打包,至于为什么打包前是12345.123解包后是12345.123046875,这个和浮点数的储存有关系,后面可以单开一个文章讲解一下IEEE标准
x、X、Z、@
$string = pack('x'); //打包一个nul字符串 echo ord($string); //输出: 0
关于X(大写X),试了N次,没搞明白怎么用,有清楚的童鞋可以给我留言,多谢。
$string = pack('Z2', 'abc5'); //其实就是将从Z后面的数字位置开始,全部设置为nul var_dump($string); //输出:string(2) "a" for($i=0;$i<strlen($string);$i++) { echo ord($string[$i]) . PHP_EOL; } //输出: 97 0
$string = pack('@4'); //我理解为填充N个nul var_dump($string); //输出: string(4) "" for($i=0;$i<strlen($string);$i++) { echo ord($string[$i]) . PHP_EOL; } //输出: 0 0 0 0
unpack
array unpack ( string $format , string $data )
unpack的使用相当简单,就是讲pack打包的数据解包,打包的时候用的什么参数,就用什么参数解包,具体使用懒得说了,列几个小例子
$string = pack('L4', 1, 2, 3, 4); var_dump(unpack('L4', $string)); //输出: array(4) { [1]=> int(1) [2]=> int(2) [3]=> int(3) [4]=> int(4) } $string = pack('L4', 1, 2, 3, 4); var_dump(unpack('Ll1/Ll2/Ll3/Ll4', $string)); //可以指定key,用/分割 //输出: array(4) { ["l1"]=> int(1) ["l2"]=> int(2) ["l3"]=> int(3) ["l4"]=> int(4) }
这两个函数到底有啥用途
数据通信(通过二进制格式与其它语言通信)
数据加密(如果不告诉第三方你的打包方式,对方解包的难度就相对很大)
节省空间(比如比较大的数字按字符串储存会浪费很多空间,打包成二进制格式才需要4位<32位数字>)
相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!
推荐阅读:
Zusammenfassung der PHP-Methode zum Löschen doppelter Werte in einem zweidimensionalen Array
PHP-Operationszeichenfolge ist in Arrays unterteilt
Das obige ist der detaillierte Inhalt vonEine kurze Diskussion über die Verwendung von Pack und Unpack in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen





Das DirectX-Reparaturtool ist ein professionelles Systemtool. Seine Hauptfunktion besteht darin, den DirectX-Status des aktuellen Systems zu erkennen. Möglicherweise wissen viele Benutzer nicht, wie man das DirectX-Reparaturtool verwendet. Schauen wir uns das ausführliche Tutorial unten an. 1. Verwenden Sie die Reparaturtool-Software, um die Reparaturerkennung durchzuführen. 2. Wenn nach Abschluss der Reparatur angezeigt wird, dass ein ungewöhnliches Problem in der C++-Komponente vorliegt, klicken Sie bitte auf die Schaltfläche „Abbrechen“ und dann auf die Menüleiste „Extras“. 3. Klicken Sie auf die Schaltfläche „Optionen“, wählen Sie die Erweiterung aus und klicken Sie auf die Schaltfläche „Erweiterung starten“. 4. Nachdem die Erweiterung abgeschlossen ist, erkennen und reparieren Sie sie erneut. 5. Wenn das Problem nach Abschluss des Reparaturtoolvorgangs immer noch nicht behoben ist, können Sie versuchen, das Programm, das den Fehler gemeldet hat, zu deinstallieren und erneut zu installieren.

Einführung in den HTTP 525-Statuscode: Verstehen Sie seine Definition und Verwendung. Der HTTP (HypertextTransferProtocol) 525-Statuscode bedeutet, dass der Server während des SSL-Handshake-Prozesses einen Fehler hat, was dazu führt, dass keine sichere Verbindung hergestellt werden kann. Der Server gibt diesen Statuscode zurück, wenn beim Transport Layer Security (TLS)-Handshake ein Fehler auftritt. Dieser Statuscode fällt in die Kategorie „Serverfehler“ und weist normalerweise auf ein Serverkonfigurations- oder Einrichtungsproblem hin. Wenn der Client versucht, über HTTPS eine Verbindung zum Server herzustellen, hat der Server keine Verbindung

Viele Freunde wissen immer noch nicht, wie man Baidu Netdisk verwendet, daher wird der Herausgeber unten erklären, wie man Baidu Netdisk verwendet. Wenn Sie es brauchen, schauen Sie es sich meiner Meinung nach an. Schritt 1: Melden Sie sich direkt nach der Installation von Baidu Netdisk an (wie im Bild gezeigt); Schritt 2: Wählen Sie dann „Meine Freigabe“ und „Übertragungsliste“ gemäß den Seitenaufforderungen (wie im Bild gezeigt); Friend Sharing“ können Sie Bilder und Dateien direkt mit Freunden teilen (wie im Bild gezeigt); Schritt 4: Wählen Sie dann „Teilen“ und wählen Sie dann Computerdateien oder Netzwerkfestplattendateien aus (wie im Bild gezeigt); Fünfter Schritt 1: Dann können Sie Freunde finden (wie im Bild gezeigt); Schritt 6: Die benötigten Funktionen finden Sie auch in der „Funktionsschatzkiste“ (wie im Bild gezeigt). Das Obige ist die Meinung des Herausgebers

So verwenden Sie die Tastenkombinationen zum Kopieren und Einfügen. Kopieren und Einfügen ist ein Vorgang, auf den wir bei der täglichen Verwendung von Computern häufig stoßen. Um die Arbeitseffizienz zu verbessern, ist es sehr wichtig, die Tastenkombinationen zum Kopieren und Einfügen zu beherrschen. In diesem Artikel werden einige häufig verwendete Tastenkombinationen zum Kopieren und Einfügen vorgestellt, um den Lesern dabei zu helfen, Kopier- und Einfügevorgänge bequemer durchzuführen. Tastenkombination zum Kopieren: Strg+Strg+C ist die Tastenkombination zum Kopieren. Durch Gedrückthalten der Strg-Taste und anschließendes Drücken der C-Taste können Sie den ausgewählten Text, die Dateien, Bilder usw. in die Zwischenablage kopieren. Um diese Tastenkombination zu verwenden,

Je länger der Computer verwendet wird, desto wahrscheinlicher ist eine Fehlfunktion. Zu diesem Zeitpunkt müssen Freunde ihre eigenen Methoden anwenden, um das Problem zu beheben. Heute präsentiere ich Ihnen ein Tutorial zur Reparatur mithilfe der Eingabeaufforderung. So verwenden Sie die Eingabeaufforderung für die automatische Reparatur von Win10: 1. Drücken Sie „Win+R“ und geben Sie cmd ein, um die „Eingabeaufforderung“ zu öffnen. 2. Geben Sie chkdsk ein, um den Reparaturbefehl anzuzeigen. 3. Wenn Sie andere Orte anzeigen müssen, können Sie diese auch hinzufügen andere Partitionen wie „d“ 4. Geben Sie den Ausführungsbefehl chkdskd:/F ein. 5. Wenn diese während des Änderungsvorgangs belegt ist, können Sie Y eingeben, um fortzufahren.

Potplayer ist ein sehr leistungsfähiger Mediaplayer, aber viele Freunde wissen immer noch nicht, wie man Potplayer verwendet. Heute werde ich die Verwendung von Potplayer im Detail vorstellen und hoffe, allen zu helfen. 1. PotPlayer-Tastenkombinationen Die standardmäßigen Tastenkombinationen für den PotPlayer-Player sind wie folgt: (1) Wiedergabe/Pause: Leertaste (2) Lautstärke: Mausrad, Pfeiltasten nach oben und unten (3) Vorwärts/Rückwärts: Pfeil nach links und rechts Tasten (4) Lesezeichen: P- Lesezeichen hinzufügen, H-View-Lesezeichen (5) Vollbild/Wiederherstellen: Eingabe (6) Geschwindigkeit: C-Beschleunigung, 7) Vorheriges/nächstes Bild: D/

Das KMS Activation Tool ist ein Softwaretool zur Aktivierung von Microsoft Windows- und Office-Produkten. KMS ist die Abkürzung für KeyManagementService, einen Schlüsselverwaltungsdienst. Das KMS-Aktivierungstool simuliert die Funktionen des KMS-Servers, sodass der Computer eine Verbindung zum virtuellen KMS-Server herstellen kann, um Windows- und Office-Produkte zu aktivieren. Das KMS-Aktivierungstool ist klein und leistungsstark und kann mit einem Klick dauerhaft aktiviert werden. Es kann jede Version des Windows-Systems und jede Version der Office-Software aktivieren, ohne dass eine Verbindung zum Internet besteht und häufig aktualisiertes Windows-Aktivierungstool. Heute werde ich es Ihnen vorstellen. Lassen Sie mich Ihnen die kms-Aktivierungsarbeit vorstellen

So verwenden Sie die Tastenkombinationen zum Zusammenführen von Zellen In der täglichen Arbeit müssen wir häufig Tabellen bearbeiten und formatieren. Das Zusammenführen von Zellen ist ein gängiger Vorgang, mit dem mehrere benachbarte Zellen zu einer Zelle zusammengeführt werden können, um die Schönheit der Tabelle und den Effekt der Informationsanzeige zu verbessern. In gängigen Tabellenkalkulationsprogrammen wie Microsoft Excel und Google Sheets ist das Zusammenführen von Zellen sehr einfach und kann über Tastenkombinationen erfolgen. Im Folgenden wird die Verwendung von Tastenkombinationen zum Zusammenführen von Zellen in diesen beiden Programmen vorgestellt. existieren
