一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

php park、unpark、ord 函數使用方法(二進制流接口應用實例)

park,unpark,ord這3個函數,在我們工作中,用到它們的估計不多。 我在最近一個工作中,因為通訊需要用到二進制流,然后接口用php接收。當時在處理時候,查閱不少資料。因為它們使用確實比較少,也很少朋友工作中會用到它們。 在工作中,我也逐漸了解到park,unpark,ord對于二進制字節處理的強大。 下面我逐一介紹它們。

park,unpark,ord函數使用介紹

park函數說明:本函數用來將資料壓縮打包到位的字符串之中。

 

語法:pack(format,args+)

參數描述
format必需。規定在包裝數據時所使用的格式。
args+可選。規定被包裝的一個或多個參數。

 

字符說明
a將字符串空白以 NULL 字符填滿
A將字符串空白以 SPACE 字符 (空格) 填滿
h十六進位字符串,低位在前
H十六進位字符串,高位在前
c有號字符
C無號字符
s有號短整數 (十六位,依計算機的位順序)
S無號短整數 (十六位,依計算機的位順序)
n無號短整數 (十六位, 高位在后的順序)
v無號短整數 (十六位, 低位在后的順序)
i有號整數 (依計算機的順序及范圍)
I無號整數 (依計算機的順序及范圍)
l有號長整數 (卅二位,依計算機的位順序)
L無號長整數 (卅二位,依計算機的位順序)
N無號短整數 (卅二位, 高位在后的順序)
V無號短整數 (卅二位, 低位在后的順序)
f單精確浮點數 (依計算機的范圍)
d倍精確浮點數 (依計算機的范圍)
x空位
X倒回一位
@填入 NULL 字符到絕對位置

 

unpark函數說明:本函數用來將位的字符串的資料解壓縮

語法:unpack(format,args+)

參數描述
format必需。規定在包裝數據時所使用的格式。
args+可選。規定被包裝的一個或多個參數。

參數與park相同。

ord函數說明:返回對應字符的acill碼值

語法:ord($character);

實例說明:
復制代碼 代碼如下:
<?php
//A字符
$str=(pack("A*", "中國"));
echo $str,"=",strlen($str),"字節/n";
getAscill($str);
//H字符
$str=(pack("H*", "fffe"));
echo $str,"=",strlen($str),"字節/n";
getAscill($str);
//C字符
$str=(pack("C*", "55","56","57"));
echo $str,"=",strlen($str),"字節/n";
getAscill($str);

//i字符 短整形 32位 4個字節 64位8個字節
$str=(pack("i", "100"));
echo $str,"=",strlen($str),"字節/n";
getAscill($str);

//s字符 短整形 2個字節
$str=(pack("s", "100"));
echo $str,"=",strlen($str),"字節/n";
getAscill($str);

//l字符 長整形 4個字節
$str=(pack("l", "100"));
echo $str,"=",strlen($str),"字節/n";
getAscill($str);

//f字符 單精度浮點 4個字節
$str=(pack("f", "100"));
echo $str,"=",strlen($str),"字節/n";
getAscill($str);

//d字符 雙精度浮點 8個字節
$str=(pack("d", "100"));
echo $str,"=",strlen($str),"字節/n";
getAscill($str);

function getAscill($str)
{
$arr=str_split($str);
foreach ($arr as $v)
{
echo $v,"=",ord($v),"/n";
}
echo "=============/r/n/r/n";
}


通過上面實例,我們可以看到,相同字符串,用不同格式存儲,所占用的字節數不同。 這里也可以看到,以不同格式保存字符可以達存儲節省空間。而且啟到不可讀加密效果。 突然想到一點,設計數據庫字段類型問題,如果一個字段只是:10位長度整型。我們設置為整形:256*256*256*256 就4個字節,如果設置為10個長度字符串。那就占10個字節。整個消化空間就是2倍的。 設置正確字符類型對提高數據庫性能有很多幫助。呵呵,有點跑題了……

php處理字節碼通訊實例分析
剛剛說的pack作用:節省空間、加密格式

下面就這2個做一個實例說明,接口開發要求:

參數描述
用戶名20字節,字符型
密碼10字節,字符型
年齡1字節,無符char型
出生年月4字節,整型(19800101)
郵箱50字節,字符串
各字段間用:"/0"分割
A、PACK封包
復制代碼 代碼如下:
<?php
$code=array(
"username"=>array("A20","張三adfb12"),
"pass"=>array("A10","asdf*#1"),
"age"=>array("C","23"),
"birthday"=>array("I","19900101"),
"email"=>array("A50","zhangsan@163.com"));

$stream=join("/0",parkByArr($code));
echo $stream,strlen($stream);


復制代碼 代碼如下:
file_put_contents("c:/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";
}
}

因為用”/0”分割,整個長度是89字節。通過上面輸出,有一些字符串輸出是可以讀取的,其它都已經變成亂碼了。這也是我說可以保密效果原因。
B、Unpack解包
解包需要按照,打包方式讀取,該讀取多長,該用什么類型讀取,必須與打包規定一樣。
復制代碼 代碼如下:
<?php
$code=array(
"username"=>array("A20"),
"pass"=>array("A10"),
"age"=>array("C"),
"birthday"=>array("I"),
"email"=>array("A50"));
$stream=file_get_contents("c:/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技術php park、unpark、ord 函數使用方法(二進制流接口應用實例),轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 一区二区三区鲁丝不卡麻豆 | 玖玖国产| 国产成人在线观看网站 | 免费精品久久久久久中文字幕 | 美女视频一区 | 热色视频| 黑人和黑人激情一级毛片 | 欧美a级网站 | 国产亚洲一区二区三区在线 | 天天综合网网欲色 | 直接观看黄网站免费视频 | 国产精品视频分类 | 亚洲免费色视频 | 亚洲午夜视频 | 国产成综合 | 欧美精品色视频 | 91啦视频在线 | 国产精品福利一区二区亚瑟 | 在线观看免费污视频 | 级毛片久久久毛片精品毛片 | 国产婷婷综合在线视频 | 五月婷六月丁香 | 最新精品国偷自产在线91 | 四虎永久网址在线观看 | 成人精品在线观看 | 啪啪91视频 | 中文字幕无限乱码不卡2021 | 九九99国产精品视频 | 日韩欧美亚洲国产精品字幕久久久 | 午夜视频在线观看国产 | 日本三级成人中文字幕乱码 | 亚洲国产精品一区二区三区 | 色爱五月天 | 91精品视频在线免费观看 | 日韩中文字幕在线播放 | 欧美一级一一特黄 | 成人播放 | 精品久久久久久中文字幕 | 欧美激情视频二区 | 性欧美video另类3d | 国产精品嫩草影院免费看 |