1. 程式人生 > >PHP函式之十進位制、二進位制、八進位制和十六進位制轉換函式

PHP函式之十進位制、二進位制、八進位制和十六進位制轉換函式

1.二進位制:

1.1.二進位制轉十進位制:

函式:bindec(string $binary_string);       

           @param $binary_string 引數表示所要轉換的二進位制字串

           @return  返回與$binary_string引數所表示的二進位制數的十進位制數等價值。

函式說明:

             bindec()將一個二進位制數轉換成Integer型別或者出於大小的需要,轉換為float型別。

             bindec()將所有的$binary_string值解釋為無符號整數。這是因為bindec()函式將其最高有效位視為數量級而非符號位。【即最高位0或1並不被bindec()表示為+或-而是按值來表示1就是1,0就是0】

注意:引數必須為字串,使用其他的資料型別會導致不可預知的結果。

範例:

<?php
    echo bindec('10010') . "\n";
    echo bindec('00110') . "\n";
    echo bindec('1111') . "\n"; 

以上程式語句會依次輸出:18,6,15

1.2.二進位制轉十六進位制

函式:bin2hex(string $str);

           @param  $str 將要轉換的ASCII字元的字串

           @return  返回轉換字串的十六進位制值。

函式說明:

            bin2hex() 函式把 ASCII 字元的字串轉換為十六進位制值。字串可通過使用 pack() 函式再轉換回去。

            bin2hex() 函式轉換使用位元組方式,高四位優先。

範例:

(1)bin2hex()轉換‘chengdu’為十六進位制值:

<?php
    $str = bin2hex('chengdu');

   echo $str;

以上程式語句會輸出:6368656e676475


(2)把一個字串值從二進位制轉換為十六進位制,再轉換回去:

<?php
    $str = 'chengdu';
         
    echo bin2hex($str) . "<br/>";
    echo pack("H*",  bin2hex($str)) . "<br/>";
 

以上程式語句依次輸出:6368656e676475, chengdu

2.八進位制:

2.1.八進位制轉十進位制:

函式:octdec(string $octal_string);

            @param  $octal_string 引數表示將要轉換的八進位制字串

            @return   返回$octal_string引數所表示的八進位制數的十進位制等值。

函式說明:

             octdec()可以處理Integer大數字,但在這種情況下它會返回float型別。

範例:

<?php
    echo octdec( '010' ) . "\n";
    echo octdec( decoct( 45 ) );
以上程式語句會輸出:8, 45

3.十進位制:

3.1.十進位制轉二進位制:

函式:decbin(int $number);

            @param  $number  所要轉換的十進位制數字,所能轉換的最大數值為十進位制的4294967295,其decbin結果為 32 個 1 的字串。

            @return   返回十進位制數字轉換後的二進位制字串。

函式說明:

            decbin()函式所能轉換的最大十進位制數值為4294967295,其結果為 32 個 1 的字串。

範例:

<?php
    echo  decbin ( 10 ) . "\n";
    echo  decbin ( 50 );
 
以上程式語句會輸出:1010, 110010

3.2.十進位制轉八進位制:

函式:decoct(int $number);

            @param  $number 所要轉換的十進位制數字,所能轉換的最大數值是十進位制的4294967295,其decoct()結果為 "37777777777"。

            @return   返回一個包含有給定$number引數的八進位制表示的字串。

函式說明:

            decoct() 函式所能轉換的最大十進位制數數值為4294967295,其結果為 "37777777777"。

範例:

<?php
    echo  decoct ( 10 ) . "\n" ;
    echo  decoct ( 50 );
 
以上程式語句會依次輸出:12, 62

3.3.十進位制轉十六進位制:

函式:dechex(int $number);

            @param $number 將要轉換的十進位制數字。

            @return   返回一個包含給定$number引數的十六進位制表示的字串。

函式說明:

              dechex()函式所能轉換的十進位制的最大數值是:PHP_INT_MAX*2 +/- 1,在32位系統上是十進位制的4294967295,其dechex()的結果為ffffffff

注意:PHP的Integer型別是有符號的,但是dechex()只能處理無符號整數,負整數會以無符號來處理。

範例:

<?php
    echo  dechex ( 10 ) . "\n" ;
    echo  dechex ( 58 );
 
以上程式語句會依次輸出:a, 3a

4.十六進位制:

4.1.十六進位制轉二進位制:

函式:hex2bin(string $data);   轉換十六進位制字串為二進位制字串

           @param  $data  使用十六進位制表示的資料。

           @return    返回給定資料的二進位制字串或者在失敗時返回FALSE。

函式說明:

            如果輸入的十六進位制字串是奇數長度或者是無效的十六進位制字串,則會丟擲一個E_WARNING級別的錯誤。

範例:

<?php
    $hex  =  hex2bin ( "6368656e67206475" );
    echo $hex;
 

以上程式語句會輸出:cheng du

4.2十六進位制轉十進位制:

函式:hexdec(string $hex_string);   轉換十六進位制字串為二進位制字串

           @param  $hex_string 將要轉換的十六進位制的字串。

           @return    返回與$hex_string引數所表示的十六進位制數等值的十進位制數。

函式說明:

            hexdec()會忽略它遇到的任意非十六進位制的字元。

            PHP 4.1.0 開始,該函式可以處理 integer大數字,這種情況下,它會返回float型別。

範例:

<?php
    var_dump ( hexdec ( "See" ));
    var_dump ( hexdec ( "ee" ));
   // 上面兩個都輸出: "int(238)"

    var_dump ( hexdec ( "that" ));  // 輸出"int(10)"
    var_dump ( hexdec ( "a0" ));  // 輸出"int(160)"
    //通過上面的例子可以看出來:hexdec()會忽略它遇到的任意非十六進位制的字元。


5.任意進位制轉換的base_convert() 函式:

函式:base_convert(string $number, int $frombase, int $tobase);

            @param $number 將要轉換的的數。

            @param  $frombase引數$number的進位制。

            @param  $tobase 將要轉換成的進位制。

            @return   返回一個包含$number以$tobase進製表示的字串。

函式說明:

           $number本身的進位制由$formbase來指定。

           $formbase和$tobase都只能是2和36(包括2和36)之間的整數值。

注意:由於使用內部的 "double" 或 "float" 型別,base_convert()的操作可能會導致大數值中的精度丟失。

範例:

<?php
    $hexadecimal  =  'A37334' ;
    echo  base_convert ( $hexadecimal ,  16 ,  2 );
    //print 101000110111001100110100

   echo  base_convert ( $hexadecimal ,  16 ,  a); 
    //print 10711860