前言
本文参阅:《PHP 经典实例》
进制转换
base_convert()
该函数将一个字符(表示采用某种进制的一个数)正确地转换为采用另一种进制标识这个数的字符串。它适用于从 2-36 的所有进制之间的转换。对于超过10的进制,使用字母 a-z 作为附加符号。第一个参数是要转换的数,后两个参数分别是它当前的进制和要转换的进制。
$hex = 'a1'; //十六进制
$decimal = base_convert( $hex,16,10 ) //转换位10进制
除此之外,还有一些专门用来转换某2个进制之间的函数。
二进制 十进制
$a = bindec(11011); // 二进制转十进制 27
$b = decbin(27); //十进制转换位二进制 11011
八进制 十进制
$a = octdec(33); //八进制转换位十进制 27
$b = decoct(27) //十进制转为八进制 33
十六进制 十进制
$a = hexdec('1b'); // 十六进制转为十进制 27
$b = dechex(27); // 十进制转为十六进制 1b
总结
二进制 :bin
十进制 :dec
八进制 :oct
十六进制 :hex
可以看到转换的函数是拼接而成的。
需要指出,转换位十进制的特殊函数会返回整数,从十进制转为其他进制数的函数将返回字符串!!!
printf
printf() 系列函数,他允许将十进制数转换位二进制,八进制和十六进制数。而且允许设置多种不同格式,如前导为0,另外对于十六进制还可以选择使用大写或小写字母。
比如打印 html 的颜色值,可以使用 %02X 格式指示符。
sprintf( '#%02X%02X%02X', 0, 102,204 );
允许的格式:
%% - 返回一个百分号 %
%b - 二进制数
%c - ASCII 值对应的字符
%d - 包含正负号的十进制数(负数、0、正数)
%e - 使用小写的科学计数法(例如 1.2e+2)
%E - 使用大写的科学计数法(例如 1.2E+2)
%u - 不包含正负号的十进制数(大于等于 0)
%f - 浮点数(本地设置)
%F - 浮点数(非本地设置)
%g - 较短的 %e 和 %f
%G - 较短的 %E 和 %f
%o - 八进制数
%s - 字符串
%x - 十六进制数(小写字母)
%X - 十六进制数(大写字母)
附加的格式值。必需放置在 % 和字母之间(例如 %.2f):
+ (在数字前面加上 + 或 - 来定义数字的正负性。默认情况下,只有负数才做标记,正数不做标记)
' (规定使用什么作为填充,默认是空格。它必须与宽度指定器一起使用。例如:%'x20s(使用 "x" 作为填充))
- (左调整变量值)
[0-9] (规定变量值的最小宽度)
.[0-9] (规定小数位数或最大字符串长度)
PHP变量的秘密
$a = 100; // php 会认为是十进制。
$b = 0144; // php 会认为是八进制
$c = 0b1100100; //php 会认为是二进制
$d = 0x64; // php 会认为是十六进制
上面4个变量在 php 里是相等的。