最近整理了php内置的进制转换函数如下:
16进制转换为10进制函数:hexdec(str);这个函数会自动忽略字符中的非16进制字符.返过来10进制转换为16进制:dechex(str)
<?php
$str10 = '12132121231';
$strRight8 = '08' ;
$strRight16 = 'zhonguoABE123' ;
$str16 = '0x123' ;
$strWrong2 = '0b0101010' ;
var_dump(hexdec ($str10));//int(1242085593649)
var_dump(hexdec ($strRight8));//int(8)
var_dump(hexdec ($strRight16));//int(11264291)
var_dump(hexdec ($str16));//int(291)
var_dump(hexdec ($strWrong2));//int(2953842704)
?>
2进制转换为10进制函数:bindec(str)。反过来10进制转换为2进制:decbin(str)
<?php
$str10 = '12132121231';
$strRight8 = '08' ;
$strRight16 = 'zhonguoABE123' ;
$str16 = '0x123' ;
$strWrong2 = '0b0101010' ;
var_dump(bindec ($str10));//int(31)
var_dump(bindec ($strRight8));//int(0)
var_dump(bindec ($strRight16));//int(1)
var_dump(bindec ($str16));//int(1)
var_dump(bindec ($strWrong2));//int(42)
?>
8进制转换为10进制函数:octdec(str);反过来10进制转换为8进制decoct(str)
<?php
$str10 = '12132121231';
$strRight8 = '08' ;
$strRight16 = 'zhonguoABE123' ;
$str16 = '0x123' ;
$strWrong2 = '0b0101010' ;
var_dump(octdec ($str10));//int(1365811865)
var_dump(octdec ($strRight8));//int(0)
var_dump(octdec ($strRight16));//int(83)
var_dump(octdec ($str16));//int(83)
var_dump(octdec ($strWrong2));//int(33288)
?>
任意进制转换函数:base_convert(参数1,参数2,参数3)
参数1要转换的数字,参数2数字本身的进制,参数3要转为的目的进制
<?php
<?php
$str10to2 = '12';
$str10to8 = '12';
$str10to16 = '12';
$str8to10 = 7 ;
$str8to16 = 7 ;
$str8to2 = 7 ;
$str16to10 = 'ABE123' ;
$str16to2 = 'ABE123' ;
$str16to8 = 'ABE123' ;
//16进制的其他写法
$strX16to10 = '0xABE123' ;
$strX16to2 = '0xABE123' ;
$strX16to8 = '0xABE123' ;
$str2to10 = '0b0101010' ;
$str2to8 = '0b0101010' ;
$str2to16 = '0b0101010' ;
$str4to2 = 13;
$str4to8 = 13;
$str4to10 = 13;
$str4to16 = 13;
$str4to4 = 13;
$str4to5 = 13;
$str4to6 = 13;
$str4to7 = 13;
var_dump(base_convert ($str10to2,10,2));//10->2
var_dump(base_convert ($str10to8,10,8));//10->8
var_dump(base_convert ($str10to16,10,16));//10->16
var_dump(base_convert ($str8to10,8,10));//8->10
var_dump(base_convert ($str8to16,8,16));//8->16
var_dump(base_convert ($str8to2,8,2));//8->2
var_dump(base_convert ($str16to10,16,10));//16->10
var_dump(base_convert ($str16to2,16,2));//16->2
var_dump(base_convert ($str16to8,16,8));//16->8
var_dump(base_convert ($strX16to10,16,10));//16->10
var_dump(base_convert ($strX16to2,16,2));//16->2
var_dump(base_convert ($strX16to8,16,8));//16->8
var_dump(base_convert ($str2to10,2,10));//2->10
var_dump(base_convert ($str2to8,2,8));//2->8
var_dump(base_convert ($str2to16,2,16));//2->16
var_dump(base_convert ($str4to2,4,2));//4->2
var_dump(base_convert ($str4to8,4,8));//4->8
var_dump(base_convert ($str4to10,4,10));//4->10
var_dump(base_convert ($str4to16,4,16));//4->16
var_dump(base_convert ($str4to4,4,4));//4->4
var_dump(base_convert ($str4to5,4,5));//4->5
var_dump(base_convert ($str4to6,4,6));//4->6
var_dump(base_convert ($str4to7,4,7));//4->7
?>
//输出
string(4) "1100"
string(2) "14"
string(1) "c"
string(1) "7"
string(1) "7"
string(1) "111"
string(8) "11264291"
string(24) "101010111110000100100011"
string(8) "52760443"
string(8) "11264291"
string(24) "101010111110000100100011"
string(8) "52760443"
string(2) "42"
string(2) "52"
string(2) "2a"
string(3) "111"
string(1) "7"
string(1) "7"
string(1) "7"
string(2) "13"
string(2) "12"
string(2) "11"
string(2) "10"
请注意进制的写法:
2进制0b并且2进制的数要用字符串形式,因为有前缀‘0b’(零b).
8进制在数字前添加0(零)作为标示,不能用字符串。在上述例子中可以见到8进制采用字符串表示时默认处理为不能识别。但是使用函数时8进制数并不能使用0作为前缀,不能识别前缀(此处尚未找到原因)。8进制数可以不使用任何前缀直接按照正常10进制数写,但是在要求指明进制类型的函数中需要指明函数类型(参见最后一个函数base_convert的8进制表示)。
16进制表示一般为‘0x’(零x)作为前缀。但是不采用0x采用前缀的写法也能识别,但是最好要采用字符串形式书写(涉及字符ABCDEF等)。