首頁  >  文章  >  後端開發  >  php中ASCII碼以及進位轉換函數實例碼詳解

php中ASCII碼以及進位轉換函數實例碼詳解

伊谢尔伦
伊谢尔伦原創
2017-07-17 11:37:442027瀏覽

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;
}

以上是php中ASCII碼以及進位轉換函數實例碼詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn