首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >十进制与基数36的转换

十进制与基数36的转换
EN

Stack Overflow用户
提问于 2012-05-06 16:02:32
回答 1查看 4.2K关注 0票数 5

我想用PHP来转换基数36中的数字。函数base_convert不起作用,因为我想转换大数:如果我再次将它从基数36转换为十进制,我就不会得到我的初始数字。

我尝试了一些在多个网站上提供的功能,但是我从来没有得到相同的结果。另外,这两个网站(在Javascript中)给出了相同的结果:

  • http://www.unitconversion.org/numbers/base-10-to-base-36-conversion.html
  • http://www.translatorscafe.com/cafe/units-converter/numbers/calculator/decimal-to-base-36/

例如,必须将1010701001118000000000000000转换为3IZS0ZE1RQ68W8SSW4

下面是我尝试过的功能(但这些功能不起作用):

  • http://www.php.net/manual/fr/function.base-convert.php#34510
  • http://www.php.net/manual/fr/function.base-convert.php#106546
  • http://www.tonymarston.net/php-mysql/showsource.php?file=converter.php
  • http://www.geoffray.be/blog/php/convertir-des-nombres-en-base-62
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-06 16:40:41

下面是两个简单的函数,使用Wikipedia上的一个算法,同时使用bcMath来计算,即使对于非常大的数字也是正确的:

代码语言:javascript
运行
复制
function fromDecimalToBase($in, $to) {
    $in = (string) $in;
    $out = '';

    for ($i = strlen($in) - 1; $i >= 0; $i--) {
        $out = base_convert(bcmod($in, $to), 10, $to) . $out;
        $in = bcdiv($in, $to);
    }

    return preg_replace('/^0+/', '', $out);
}

function fromBaseToDecimal($in, $from) {
    $in = (string) $in;
    $out = '';

    for ($i = 0, $l = strlen($in); $i < $l; $i++) {
        $x = base_convert(substr($in, $i, 1), $from, 10);
        $out = bcadd(bcmul($out, $from), $x);
    }

    return preg_replace('/^0+/', '', $out);
}

然而,我得到了3izs0ze1rq66tifrpc的号码,你已经提供-也许你的转换是错误的?

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10471991

复制
相关文章

相似问题

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