最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

php使用pack處理二進制文件的方法

 更新時間:2014年07月03日 11:15:50   投稿:shichen2014  
這篇文章主要介紹了php使用pack處理二進制文件的方法,需要的朋友可以參考下

php讀寫二進制文件可以使用pack和unpack函數(shù)。
今天要處理一個二進制文件的問題,所以需要用一下,特意了解一下pack的用法,unpack用法與此類似。

簡單來說,pack函數(shù)就是給一個目標格式,和相應(yīng)的參數(shù),就可以返回二進制數(shù)據(jù)了。

下面舉例加以說明,對于四個整數(shù):

pack("L4", 0,1,2,3)
pack("LLLL", 0,1,2,3)
pack("L", 0).pack("L", 1).pack("L", 2).pack("L", 3)

上面的處理結(jié)果是一樣的,也就是說,format是描述后面的數(shù)據(jù)的格式。
至于具體format可以用什么,看看format characters就知道了。
比如一個30字符的 pack("a30", "http://m.fzitv.net") ,就是這個意思,很簡單

pack函數(shù)的官方聲明如下:

引用
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

看累了英文,下面來看看對應(yīng)的中文解釋:

引用
pack()函數(shù)的作用是:將數(shù)據(jù)壓縮成一個二進制字符串。

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位,按機器字節(jié)順序) 
S - unsigned short (always 16 bit, machine byte order) 
S – 不帶有符號的短模式[short](通常是16位,按機器字節(jié)排序) 
n - unsigned short (always 16 bit, big endian byte order) 
n -不帶有符號的短模式[short](通常是16位,按大endian字節(jié)排序) 
v - unsigned short (always 16 bit, little endian byte order) 
v -不帶有符號的短模式[short](通常是16位,按小endian字節(jié)排序) 
i - signed integer (machine dependent size and byte order) 
i – 帶有符號的整數(shù)(由大小和字節(jié)順序決定) 
I - unsigned integer (machine dependent size and byte order) 
I – 不帶有符號的整數(shù)(由大小和字節(jié)順序決定) 
l - signed long (always 32 bit, machine byte order) 
l– 帶有符號的長模式[long](通常是32位,按機器字節(jié)順序) 
L - unsigned long (always 32 bit, machine byte order) 
L – 不帶有符號的長模式[long](通常是32位,按機器字節(jié)順序) 
N - unsigned long (always 32 bit, big endian byte order) 
N – 不帶有符號的長模式[long](通常是32位,按大edian字節(jié)順序) 
V - unsigned long (always 32 bit, little endian byte order) 
V– 不帶有符號的長模式[long](通常是32位,按小edian字節(jié)順序) 
f - float (machine dependent size and representation) 
f –浮點(由大小和字節(jié)順序決定) 
d - double (machine dependent size and representation) 
d – 雙精度(由大小和字節(jié)順序決定) 
x - NUL byte 
x – 空字節(jié)[NUL byte] 
X - Back up one byte 
X- 后面一個字節(jié)[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","m.fzitv.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;
}

相關(guān)文章

  • php數(shù)組分頁實現(xiàn)方法

    php數(shù)組分頁實現(xiàn)方法

    這篇文章主要介紹了php數(shù)組分頁實現(xiàn)方法,涉及php數(shù)組操作、數(shù)學(xué)運算及字符串操作等相關(guān)技巧,需要的朋友可以參考下
    2016-04-04
  • PHP生成隨機碼的思路與方法實例探索

    PHP生成隨機碼的思路與方法實例探索

    這篇文章主要介紹了PHP生成隨機碼的思路與方法,結(jié)合實例形式分析了php生成隨機字符串的常見思路與相關(guān)操作技巧,需要的朋友可以參考下
    2019-04-04
  • PHP隨機生成用戶信息實例分析

    PHP隨機生成用戶信息實例分析

    在本篇文章里小編給大家整理的是一篇關(guān)于PHP隨機生成用戶信息實例分析內(nèi)容,對此有興趣的朋友們可以測試參考下。
    2021-12-12
  • PHP實現(xiàn)數(shù)組array轉(zhuǎn)換成xml的方法

    PHP實現(xiàn)數(shù)組array轉(zhuǎn)換成xml的方法

    這篇文章主要介紹了PHP實現(xiàn)數(shù)組array轉(zhuǎn)換成xml的方法,涉及php針對數(shù)組的遍歷及xml格式文件的構(gòu)造技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2016-07-07
  • PHP實現(xiàn)可自定義樣式的分頁類

    PHP實現(xiàn)可自定義樣式的分頁類

    這篇文章主要介紹了PHP實現(xiàn)可自定義樣式的分頁類,可以自定義分頁樣式,感興趣的小伙伴們可以參考一下
    2016-03-03
  • hadoop中一些常用的命令介紹

    hadoop中一些常用的命令介紹

    本篇文章是對hadoop中一些常用的命令進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06
  • php 隨機生成10位字符代碼

    php 隨機生成10位字符代碼

    php 隨機生成10位字符,大家可以看下原理就可以實現(xiàn)自定義位數(shù)的隨機字符串了。
    2009-03-03
  • PHP連接數(shù)據(jù)庫實現(xiàn)頁面增刪改查效果

    PHP連接數(shù)據(jù)庫實現(xiàn)頁面增刪改查效果

    這篇文章主要介紹了如何利用PHP實現(xiàn)連接SQL數(shù)據(jù)庫,從而對頁面進行增刪改查功能,文中的示例代碼講解詳細,感興趣的可以了解一下
    2022-03-03
  • PHP實現(xiàn)JS中escape與unescape的方法

    PHP實現(xiàn)JS中escape與unescape的方法

    這篇文章主要介紹了PHP實現(xiàn)JS中escape與unescape的方法,通過json_encode和json_decode方法實現(xiàn)JS中escape與unescape函數(shù)的功能,需要的朋友可以參考下
    2016-07-07
  • php一維二維數(shù)組鍵排序方法實例總結(jié)

    php一維二維數(shù)組鍵排序方法實例總結(jié)

    這篇文章主要介紹了php一維二維數(shù)組鍵排序方法,以實例形式總結(jié)了針對一維數(shù)組的冒泡排序與使用array_multisort()對二位數(shù)組按照指定鍵值排序等方法,具有不錯的參考借鑒價值,需要的朋友可以參考下
    2014-11-11

最新評論

焉耆| 灵台县| 博白县| 竹溪县| 尖扎县| 舞阳县| 得荣县| 麻阳| 修文县| 丹棱县| 平度市| 谷城县| 西平县| 营口市| 建瓯市| 洛隆县| 牡丹江市| 云霄县| 鄯善县| 四平市| 唐海县| 苍溪县| 大庆市| 徐州市| 菏泽市| 沁源县| 伊宁县| 威远县| 西平县| 维西| 万安县| 宁波市| 万荣县| 陇西县| 玉林市| 留坝县| 萨迦县| 平原县| 大田县| 徐汇区| 大英县|