首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP中准确可靠的Base36?

PHP中准确可靠的Base36?
EN

Stack Overflow用户
提问于 2014-03-27 23:54:21
回答 1查看 151关注 0票数 1

到目前为止,我的代码如下:

代码语言:javascript
复制
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版本那样工作?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-27 23:56:29

本地人:

转换是一个恰巧能做你想做的事情的函数。

代码语言:javascript
复制
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初始化值

代码语言:javascript
复制
function gmp_convert($num, $base_a, $base_b)
{
    return gmp_strval ( gmp_init($num, $base_a), $base_b );
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22701612

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档