php中ASCII碼以及進位轉換函式執行個體代碼詳解

來源:互聯網
上載者:User
ASCII碼對照表圖分為兩個單元
1,控制字元 0-31和127
2,可顯示字元 32-126
(1)48~57為0到9十個阿拉伯數字;
(2)65~90為26個大寫英文字母;
(3)97~122號為26個小寫英文字母;
(4)其它標點符號、運算子號等;

以字元A為例
Dec表示十進位,如65
Hx表示十六進位,如41
Oct表示八進位,如101
Char表示顯示字元,如A

PHP字元轉換函式說明

具體字元轉換函式說明請參考[PHP函數篇詳解十進位、二進位、八進位和十六進位轉換函式說明]
十進位轉二進位 decbin() 函數
十進位轉八進位 decoct() 函數
十進位轉十六進位 dechex() 函數
二進位轉十六制進 bin2hex() 函數
二進位轉十制進 bindec() 函數
八進位轉十進位 octdec() 函數
十六進位轉十進位 hexdec()函數
任意進位轉換 base_convert() 函數

字元轉換執行個體
執行個體一,如何把一個字元轉換為二進位、八進位或十六進位,可以使用ord()函數先把字元轉換為ASCII值,然後使用相應的進位轉換函式進行轉換,如下
a 這個字元轉換為其二進位/八進位/十六進位,如下

a字元的十進位:ord('a'); //輸出97二進位:decbin(ord('a')); //輸出1100001八進位:decoct(ord('a')); //輸出141十六進位:dechex(ord('a')); //輸出61

然後可以通過把各進位輸出的結果對應上面ASCII碼對照表圖進行核對。

執行個體二,如何把一個二進位轉換為十六進位或十進位,如a的二進位,如下

採用執行個體一的方法擷取a字元的二進位decbin(ord('a'));然後把二進位轉換為十六進位或十進位十六進位:bin2hex(decbin(ord('a')));//輸出31313030303031二進位J:bindec(decbin(ord('a'))); //輸出97

一個相互轉換的範例程式碼:

class ascii{function decode($str){    preg_match_all( "/(d{2,5})/", $str,$a);    $a = $a[0];    foreach ($a as $dec)    {        if ($dec < 128)        {            $utf .= chr($dec);        }        else if ($dec < 2048)       {            $utf .= chr(192 + (($dec - ($dec % 64)) / 64));            $utf .= chr(128 + ($dec % 64));        }        else        {            $utf .= chr(224 + (($dec - ($dec % 4096)) / 4096));            $utf .= chr(128 + ((($dec % 4096) - ($dec % 64)) / 64));            $utf .= chr(128 + ($dec % 64));        }    }    return $utf;}function encode($c){    $len = strlen($c);    $a = 0;    while ($a < $len)    {        $ud = 0;        if (ord($c{$a}) >=0 && ord($c{$a})< =127)        {            $ud = ord($c{$a});            $a += 1;        }        else if (ord($c{$a}) >=192 && ord($c{$a})< =223)        {            $ud = (ord($c{$a})-192)*64 + (ord($c{$a+1})-128);            $a += 2;        }        else if (ord($c{$a}) >=224 && ord($c{$a})< =239)        {            $ud = (ord($c{$a})-224)*4096 + (ord($c{$a+1})-128)*64 + (ord($c{$a+2})-128);            $a += 3;        }        else if (ord($c{$a}) >=240 && ord($c{$a})< =247)        {            $ud = (ord($c{$a})-240)*262144 + (ord($c{$a+1})-128)*4096 + (ord($c{$a+2})-128)*64 + (ord($c{$a+3})-128);            $a += 4;        }        else if (ord($c{$a}) >=248 && ord($c{$a})< =251)        {            $ud = (ord($c{$a})-248)*16777216 + (ord($c{$a+1})-128)*262144 + (ord($c{$a+2})-128)*4096 + (ord($c{$a+3})-128)*64 + (ord($c{$a+4})-128);            $a += 5;        }        else if (ord($c{$a}) >=252 && ord($c{$a})< =253)        {            $ud = (ord($c{$a})-252)*1073741824 + (ord($c{$a+1})-128)*16777216 + (ord($c{$a+2})-128)*262144 + (ord($c{$a+3})-128)*4096 + (ord($c{$a+4})-128)*64 + (ord($c{$a+5})-128);            $a += 6;        }        else if (ord($c{$a}) >=254 && ord($c{$a})< =255)        { //error            $ud = false;        }        $scill .= "&#$ud;";    }    return $scill;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.