變量里可以存儲二進制數
<?php
header("Content-type:text/html;charset=utf-8");
/**
* 將字符串轉換成二進制
* @param type $str
* @return type
*/
function StrToBin($str){
//1.列出每個字符
$arr = preg_split('/(?<!^)(?!$)/u', $str);
//2.unpack字符
foreach($arr as &$v){
$temp = unpack('H*', $v);
$v = base_convert($temp[1], 16, 2);
unset($temp);
}
return join(' ',$arr);
//return $arr;
}
/**
* 講二進制轉換成字符串
* @param type $str
* @return type
*/
function BinToStr($str){
$arr = explode(' ', $str);
foreach($arr as &$v){
$v = pack("H".strlen(base_convert($v, 2, 16)), base_convert($v, 2, 16));
}
return join('', $arr);
}
echo StrToBin("php二次開發:www.php2.cc");;
echo '<br/>';
echo BinToStr("1110000 1101000 1110000 111001001011101010001100 111001101010110010100001 111001011011110010000000 111001011000111110010001 111011111011110010011010 1110111 1110111 1110111 101110 1110000 1101000 1110000 110010 101110 1100011 1100011");
?>
PHP處理二進制數據需要用到pack()和unpack()。
pack()用來將數據轉成二進制數據,使用方法如下:
pack(format,args+)
format 必需。規定在包裝數據時所使用的格式。
args+ 可選。規定被包裝的一個或多個參數。
pack(“LL”, 0,1);
pack(“C”, a);
unpack() 函數從二進制字符串對數據進行解包。,它接受2個參數,使用方法如下:
unpack(format,data)
format 必需。規定在解包數據時所使用的格式。
data 可選。規定被解包的二進制數據。
$arr = unpack(“Chead”, $binstream); //讀取第1個字節
$arr = unpack(“Chead/C3string/C4number”, $binstream); //讀取8個字節,用斜杠可以分隔
pack()和unpack()函數的第一個參數表如下
a:NULL填充的字節串
A:空格填充的字節串
h:十六進制數,低四位字節優先
H:十六進制數,高四位字節優先
c:有符號字符
C:無符號字符
s:有符號短整型(總是16位,機器字節序)
S:無符號短整型(總是16位,機器字節序)
n:無符號短整型(總是16位,大尾字節序)
v:無符號短整型(總是16位,小尾字節序)
I:有符號整型(機器相關大小和字節序)
I:無符號整型(機器相關大小和字節序)
l:有符號長整型(總是32位,機器字節序)
L:無符號長整型(總是32位,機器字節序)
N:無符號長整型(總是32位,大尾字節序)
V:無符號長整型(總是32位,小尾字節序)
f:浮點數(機器相關大小和表示)
d:雙精度數(機器相關大小和表示)
x:空字節
X:倒退一個字節
@:用NULL填充絕對位置