轉貼 - 如何使用php實(shí)現asc、binary以及hex之間的互換
廢話(huà)少說(shuō),我們直接進(jìn)入代碼:
function asc2bin($str) {
$text_array = explode("\r\n", chunk_split($str, 1));
for ($n = 0; $n < count($text_array) - 1; $n++) {
$newstring .= substr("0000".base_convert(ord($text_array[$n]), 10, 2), -8);
}
$newstring = chunk_split($newstring, 8, " ");
return $newstring;
}
function bin2asc($str) {
$str = str_replace(" ", "", $str);
$text_array = explode("\r\n", chunk_split($str, 8));
for ($n = 0; $n < count($text_array) - 1; $n++) {
$newstring .= chr(base_convert($text_array[$n], 2, 10));
}
return $newstring;
}
以上兩個(gè)函數是實(shí)現asc和binary之間的幻想轉化的。
重點(diǎn)說(shuō)幾個(gè)函數吧。
其中的chunk_split函數的原型如下:
string chunk_split(string string, int [chunklen] , string [end]);
函數描述:
本函數將字符串變成小段供其它函數使用。例如,base64_encode。內定是參數 chunklen (76 個(gè)字符) 每隔 76 個(gè)字符插入 end ("\r\n")。傳回新字符串而不更動(dòng)原字串。
舉個(gè)簡(jiǎn)單的例子:
<?
$string=chunk_split("abcdefghijklmnopqrstuvwxyz",5);
echo $string;
?>
將會(huì )顯示如下格式的字符串:
abcde fghij klmno pqrst uvwxy z
還有一個(gè)需要注意的是base_convert函數。它是一個(gè)數學(xué)函數。函數描述如下:
string base_convert(string number, int frombase, int tobase);
本函式將數字字串 number 從以 frombase 進(jìn)位轉換到以 tobase 進(jìn)位。本式能夠處理的由以二進(jìn)位到以三十六進(jìn)位之間的進(jìn)位方式。在十進(jìn)位之前都是以數字表示,而在超過(guò)十進(jìn)位之后就用英文字母表示。例如十六進(jìn)位個(gè)位數依序為 123456789abcdef,10 的順序是第十七個(gè),這時(shí)才進(jìn)一位。而三十六進(jìn)位 a 是第十個(gè)、b 為第十一個(gè)、z 為第三十六個(gè)、10 是第三十七個(gè),這時(shí)才進(jìn)位。
弄懂了上面兩個(gè)函數,我給出的轉換函數相信大家也能看明白了。。。
我們接著(zhù)看:
function asc2hex($str) {
return chunk_split(bin2hex($str), 2, " ");
}
function hex2asc($str) {
$str = str_replace(" ", "", $str);
for ($n=0; $n<strlen($str); $n+=2) {
$newstring .= pack("C", hexdec(substr($str, $n, 2)));
}
return $newstring;
}
以上實(shí)現了asc到十六進(jìn)制之間的轉換。第一個(gè)函數很簡(jiǎn)單,我就不多說(shuō)了。第二個(gè)函數需要注意下面2個(gè)函數:
string str_replace(string needle, string str, string haystack);
這個(gè)函數是將haystack字符串中的needle子串替換成str字符串。
pack函數在perl時(shí)代就是一個(gè)非常有用的函數,在php里雖然沒(méi)有那么重要但是也不可小視的。
string pack(string format, mixed [args]...);
把一個(gè)列表或數組以在實(shí)際機器存貯格式或C等編程語(yǔ)言使用的格式轉化(包裝)到一個(gè)簡(jiǎn)單變量中。
具體用法大家可以參考perl或者php中的函數說(shuō)明。
再來(lái):
function binary2hex($str) {
$str = str_replace(" ", "", $str);
$text_array = explode("\r\n", chunk_split($str, 8));
for ($n = 0; $n < count($text_array) - 1; $n++) {
$newstring .= base_convert($text_array[$n], 2, 16);
}
$newstring = chunk_split($newstring, 2, " ");
return $newstring;
}
function hex2binary($str) {
$str = str_replace(" ", "", $str);
$text_array = explode("\r\n", chunk_split($str, 2));
for ($n = 0; $n < count($text_array) - 1; $n++) {
$newstring .= substr("0000".base_convert($text_array[$n], 16, 2), -8);
}
$newstring = chunk_split($newstring, 8, " ");
return $newstring;
}
上面兩個(gè)是對一六進(jìn)制和二進(jìn)制之間的轉換。大部分函數都講過(guò)了。很簡(jiǎn)單。
看到這里,大家對php的柑橘而是什么呢?我想不只是強大可以形容吧。
需要完整代碼的可以發(fā)email到:sqlinject@hotmail.com。
謝謝大家對s8s8的支持!
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請
點(diǎn)擊舉報。