您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關php二進制文件中的怎么利用pack進行處理,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
php讀寫二進制文件可以使用pack和unpack函數。
今天要處理一個二進制文件的問題,所以需要用一下,特意了解一下pack的用法,unpack用法與此類似。
簡單來說,pack函數就是給一個目標格式,和相應的參數,就可以返回二進制數據了。
下面舉例加以說明,對于四個整數:
pack("L4", 0,1,2,3) pack("LLLL", 0,1,2,3) pack("L", 0).pack("L", 1).pack("L", 2).pack("L", 3)
上面的處理結果是一樣的,也就是說,format是描述后面的數據的格式。
至于具體format可以用什么,看看format characters就知道了。
比如一個30字符的 pack("a30", "https://www.jb51.net") ,就是這個意思,很簡單
pack函數的官方聲明如下:
引用 pack (PHP 3, PHP 4, PHP 5) pack -- Pack data into binary string Description string pack ( string format [, mixed args [, mixed ...]] ) Pack given arguments into binary string according to format. Returns binary string containing data. The idea to this function was taken from Perl and all formatting codes work the same as there, however, there are some formatting codes that are missing such as Perl's "u" format code. The format string consists of format codes followed by an optional repeater argument. The repeater argument can be either an integer value or * for repeating to the end of the input data. For a, A, h, H the repeat count specifies how many characters of one data argument are taken, for @ it is the absolute position where to put the next data, for everything else the repeat count specifies how many data arguments are consumed and packed into the resulting binary string. Currently implemented are 表格 1. pack() format characters Code Description a NUL-padded string A SPACE-padded string h Hex string, low nibble first H Hex string, high nibble first c signed char C unsigned char s signed short (always 16 bit, machine byte order) S unsigned short (always 16 bit, machine byte order) n unsigned short (always 16 bit, big endian byte order) v unsigned short (always 16 bit, little endian byte order) i signed integer (machine dependent size and byte order) I unsigned integer (machine dependent size and byte order) l signed long (always 32 bit, machine byte order) L unsigned long (always 32 bit, machine byte order) N unsigned long (always 32 bit, big endian byte order) V unsigned long (always 32 bit, little endian byte order) f float (machine dependent size and representation) d double (machine dependent size and representation) x NUL byte X Back up one byte @ NUL-fill to absolute position
看累了英文,下面來看看對應的中文解釋:
引用 pack()函數的作用是:將數據壓縮成一個二進制字符串。 a - NUL-padded string a - NUL- 字符串填滿[padded string] A - SPACE-padded string A - SPACE- 字符串填滿[padded string] h - Hex string, low nibble first h – 十六進制字符串,低“四位元”[low nibble first] H - Hex string, high nibble first H - 十六進制字符串,高“四位元”[high nibble first] c - signed char c – 帶有符號的字符 C - unsigned char C – 不帶有符號的字符 s - signed short (always 16 bit, machine byte order) s – 帶有符號的短模式[short](通常是16位,按機器字節順序) S - unsigned short (always 16 bit, machine byte order) S – 不帶有符號的短模式[short](通常是16位,按機器字節排序) n - unsigned short (always 16 bit, big endian byte order) n -不帶有符號的短模式[short](通常是16位,按大endian字節排序) v - unsigned short (always 16 bit, little endian byte order) v -不帶有符號的短模式[short](通常是16位,按小endian字節排序) i - signed integer (machine dependent size and byte order) i – 帶有符號的整數(由大小和字節順序決定) I - unsigned integer (machine dependent size and byte order) I – 不帶有符號的整數(由大小和字節順序決定) l - signed long (always 32 bit, machine byte order) l– 帶有符號的長模式[long](通常是32位,按機器字節順序) L - unsigned long (always 32 bit, machine byte order) L – 不帶有符號的長模式[long](通常是32位,按機器字節順序) N - unsigned long (always 32 bit, big endian byte order) N – 不帶有符號的長模式[long](通常是32位,按大edian字節順序) V - unsigned long (always 32 bit, little endian byte order) V– 不帶有符號的長模式[long](通常是32位,按小edian字節順序) f - float (machine dependent size and representation) f –浮點(由大小和字節順序決定) d - double (machine dependent size and representation) d – 雙精度(由大小和字節順序決定) x - NUL byte x – 空字節[NUL byte] X - Back up one byte X- 后面一個字節[Back up one byte] @ - NUL-fill to absolute position @ - NUL- 添加到一個絕對位置[absolute position]
示例代碼如下:
<?php $code=array( "username"=>array("A7","張三adfb12"), "pass"=>array("A10","asdf*#1"), "age"=>array("C","23"), "birthday"=>array("I","19900101"), "email"=>array("A50","www.jb51.net")); $stream=join("\0",parkByArr($code)); echo $stream,strlen($stream); file_put_contents("1.txt",$stream);//將流保存起來便于下面讀取 function parkByArr($arr) { $atArr=array(); foreach ($arr as $k=>$v) { $atArr[]=pack($v[0],$v[1]); } return $atArr; } function getAscill($str) { $arr=str_split($str); foreach ($arr as $v) { echo $v,"=",ord($v),"\n"; } } $code=array( "username"=>array("A20"), "pass"=>array("A10"), "age"=>array("C"), "birthday"=>array("I"), "email"=>array("A50")); $stream=file_get_contents("1.txt"); var_dump(parkByArr($stream,$code)); function parkByArr($str,$code) { $Arr=explode("\0",$str); $atArr=array(); $i=0; foreach ($code as $k=>$v) { $atArr[$k]=unpack($v[0],$Arr[$i]); $i++; } return $atArr; }
以上就是php二進制文件中的怎么利用pack進行處理,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。