到目前为止,我的代码如下:
function base36($value, $return_size)
{
$base36 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
$buffer = str_pad("", $return_size);
$offset = $return_size;
do {
$buffer[--$offset] = $base36[$value % 36];
} while ($value /= 36);
return $buffer;
}$value: 64bit integer
$return_size: the expected size in bytes the function should return
它不能正常工作,是因为$value是64位整数,也是因为强制双除法。当PHP大约是64位整数时,它看起来非常有限。如何使上面的代码像精确的C版本那样工作?
发布于 2014-03-27 23:56:29
本地人:
转换是一个恰巧能做你想做的事情的函数。
string base_convert ( string $number , int $frombase , int $tobase )它的输入结构限制在基2和基36之间,因此它涵盖了您所需的内容。它很有可能(像许多其他PHP函数一样)只是C库原件的简单包装器。
GMP:
斯特瓦尔是另一个功能,它恰好做你想做的事情--它也有更高的精度(因为GMP是一个多精度的算术库)。
GMP值需要使用gmp_init从字符串中初始化,其结果值(是资源)用于所有后续的GMP算术函数调用。
它有更多的可用基(从2到62),但由于需要输入值并将它们作为资源使用,所以使用起来有点不那么有趣。
如果运行PHP5.6,则不太有趣,因为GMP重载了该版本中的算术操作符,允许GMP对象(资源?)使用运算符添加、减缩等。
下面是一个简单的GMP转换函数示例,它不需要使用gmp_init初始化值
function gmp_convert($num, $base_a, $base_b)
{
return gmp_strval ( gmp_init($num, $base_a), $base_b );
}https://stackoverflow.com/questions/22701612
复制相似问题