PHP新特性 第9.6章 字符串-进制 PHP新特性 第9.6章 字符串-进制

2023-06-16

一、二进制

A、二进制转十进制

bindec(string $binary_string)

函数说明:

bindec()将一个二进制数转换成Integer类型或者出于大小的需要,转换为float类型。

bindec()将所有的$binary_string值解释为无符号整数。这是因为bindec()函数将其最高有效位视为数量级而非符号位。【即最高位0或1并不被bindec()表示为+或-而是按值来表示1就是1,0就是0】

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

以上程序语句会依次输出:18,6,15

B、二进制转十六进制

bin2hex(string $str)

函数说明:

bin2hex() 函数把 ASCII 字符的字符串转换为十六进制值。字符串可通过使用 pack() 函数再转换回去。

bin2hex() 函数转换使用字节方式,高四位字优先。

$str = 'chengdu';
echo bin2hex($str) . "
";
echo pack("H*", bin2hex($str)) . "
";

以上程序语句依次输出:6368656e676475, chengdu

二、八进制

A、八进制转十进制

octdec(string $octal_string)

函数说明:

octdec()可以处理Integer大数字,但在这种情况下它会返回float类型。

echo octdec( '010' ) . "\n";
echo octdec( decoct( 45 ) );

以上程序语句会输出:8, 45

三、十进制

A、十进制转二进制:

decbin(int $number)

函数说明:

decbin()函数所能转换的最大十进制数值为4294967295,其结果为 32 个 1 的字符串。

echo decbin ( 10 ) . "\n";
echo decbin ( 50 );

以上程序语句会输出:1010, 110010

B、十进制转八进制:

decoct(int $number)

函数说明:

decoct()函数所能转换的最大十进制数数值为4294967295,其结果为 "37777777777"。

echo decoct ( 10 ) . "\n" ;
echo decoct ( 50 );

以上程序语句会依次输出:12, 62

C、十进制转十六进制:

dechex(int $number)

函数说明:

dechex()函数所能转换的十进制的最大数值是:PHP_INT_MAX*2 +/- 1,在32位系统上是十进制的4294967295,其dechex()的结果为ffffffff。

注意:PHP的Integer类型是有符号的,但是dechex()只能处理无符号整数,负整数会以无符号来处理。

echo dechex ( 10 ) . "\n" ;
echo dechex ( 58 );

以上程序语句会依次输出:a, 3a

四、十六进制

A、十六进制转二进制:

hex2bin(string $data);

函数说明:

如果输入的十六进制字符串是奇数长度或者是无效的十六进制字符串,则会抛出一个E_WARNING级别的错误。

$hex = hex2bin ( "6368656e67206475" );
echo $hex;
以上程序语句会输出:cheng du

B、十六进制转十进制:

hexdec(string $hex_string);

函数说明:

hexdec()会忽略它遇到的任意非十六进制的字符。

PHP 4.1.0 开始,该函数可以处理 integer大数字,这种情况下,它会返回float类型。

var_dump ( hexdec ( "See" ));
var_dump ( hexdec ( "ee" ));
// 上面两个都输出: "int(238)"
var_dump ( hexdec ( "that" )); // 输出"int(10)"
var_dump ( hexdec ( "a0" )); // 输出"int(160)"
//通过上面的例子可以看出来:hexdec()会忽略它遇到的任意非十六进制的字符。

⑤、任意进制转换的base_convert() 函数:

base_convert(string $number, int $frombase, int $tobase)

函数说明:

$number本身的进制由$formbase来指定。

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

注意:由于使用内部的 "double" 或 "float" 类型,base_convert()的操作可能会导致大数值中的精度丢失。

$hexadecimal = 'A37334' ;
echo base_convert ( $hexadecimal , 16 , 2 );
//print 101000110111001100110100
echo base_convert ( $hexadecimal , 16 , a);
//print 10711860
阅读 416