最近需要把十进制数字转成十六进制的,在 PHP 里用了dechex函数,但是测试的时候发现有的数怎么转换都是 7fffffff, 试了一下发现只要比 7fffffff 大就会溢出,都会变转成 7fffffff,而hexdec反过来转换 ffffffff 以内的都不会有事, 百度了一下PHP的dechex函数说明,发现意思就是hexdec可以转换最大 7fffffff 的数值,而dechex可以转换最大 ffffffff, 这和我测试的结果正好相反啊!不知道是不是说明写错了,反正我不用这两个函数了,真的不靠谱啊, 我换了一个任意类型转换的函数:base_convert($a, 10, 16),就完美转换了,下面附上各个转换函数的说明。 十六进制转十进制 hexdec()函数 var_dump(hexdec("See")); var_dump(hexdec("ee")); // both print "int(238)" var_dump(hexdec("that")); // print "int(10)" var_dump(hexdec("a0")); // print "int(160)" hexdec (PHP 3, PHP 4, PHP 5) hexdec -- 十六进制转换为十进制 说明 number hexdec ( string hex_string ) 返回与 hex_string 参数所表示的十六进制数等值的的十进制数。hexdec() 将一个十六进制字符串转换为十进制数。 所能转换的最大数值为 7fffffff,即十进制的 2147483647。 PHP 4.1.0 开始,该函数可以处理大数字,这种情况下,它会返回 float 类型。 hexdec() 将遇到的所有非十六进制字符替换成 0。这样,所有左边的零都被忽略,但右边的零会计入值中。 十进制转十六进制 dechex() 函数 echo dechex(10); //输出 a echo dechex(47); //输出 2f dechex (PHP 3, PHP 4, PHP 5) dechex -- 十进制转换为十六进制 说明 string dechex ( int number ) 返回一字符串,包含有给定 number 参数的十六进制表示。 所能转换的最大数值为十进制的 4294967295,其结果为 "ffffffff"。 任意进制转换 base_convert() 函数 $hexadecimal = 'A37334'; echo base_convert($hexadecimal, 16, 2);//输出 101000110111001100110100 base_convert (PHP 3 >= 3.0.6, PHP 4, PHP 5) base_convert -- 在任意进制之间转换数字 说明 string base_convert ( string number, int frombase, int tobase ) 返回一字符串,包含 number 以 tobase 进制的表示。number 本身的进制由 frombase 指定。 frombase 和 tobase 都只能在 2 和 36 之间(包括 2 和 36)。 高于十进制的数字用字母 a-z 表示,例如 a 表示 10,b 表示 11 以及 z 表示 35。
PHP的dechex函数最大转换7fffffff解决办法
(2)个小伙伴在吐槽
- 32位地址空间的最高址7fffffff
- 我是64位的系统啊 难道是因为php版本是32的?