首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在php中将大整数转换为十六进制?

如何在php中将大整数转换为十六进制?
EN

Stack Overflow用户
提问于 2013-01-27 01:48:10
回答 2查看 5.9K关注 0票数 10

如何进行转换:

代码语言:javascript
复制
9312660682897061594767289296453011313180604726492752614962349778735928598708212386406555876878916185094145420038141655929349984786756296776268556142401047 

在16号基地?

我找到了这个递归函数:

代码语言:javascript
复制
function bcdechex($dec) {
            $last = bcmod($dec, 16);
            $remain = bcdiv(bcsub($dec, $last), 16);

            if($remain == 0) {
                return dechex($last);
            } else {
                return bcdechex($remain).dechex($last);
            }
        }

但是,即使我的php.ini配置文件中有xdebug.max_nesting_level = 1000,也达到了嵌套级别100。

我的xdebug配置如下所示:

代码语言:javascript
复制
;Xdebug
zend_extension = "${path}\php\php546x121216181946\php_xdebug-2.2.1-5.4-vc9.dll"
xdebug.default_enable=1
xdebug.remote_enable=1
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9000
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_autostart = false
xdebug.dump_globals=1
xdebug.dump=COOKIE,FILES,GET,POST,REQUEST,SERVER,SESSION
xdebug.dump.SERVER=REMOTE_ADDR,REQUEST_METHOD,REQUEST_URI
xdebug.show_local_vars=1
xdebug.show_mem_delta=1
xdebug.collect_includes=1
xdebug.collect_vars=1
xdebug.collect_params=4
xdebug.collect_return=1
xdebug.auto_trace=0
xdebug.trace_options=0
xdebug.trace_format=0
xdebug.trace_output_dir="${path}\xdebug\trace"
xdebug.trace_output_name="trace.%t"
xdebug.profiler_enable=0
xdebug.profiler_append=1
xdebug.profiler_enable_trigger=1
xdebug.profiler_output_dir="${path}\xdebug\profiler"
xdebug.profiler_output_name="cachegrind.out.%s.%t"
xdebug.max_nesting_level = 1000
;/Xdebug

有没有人有一个不同的函数,或者任何关于如何转换这个整数的提示?

谢谢你!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-27 02:20:01

修改你认为是迭代的而不是递归的函数是非常容易的:

代码语言:javascript
复制
function bcdechex($dec) {
    $hex = '';
    do {    
        $last = bcmod($dec, 16);
        $hex = dechex($last).$hex;
        $dec = bcdiv(bcsub($dec, $last), 16);
    } while($dec>0);
    return $hex;
}
票数 12
EN

Stack Overflow用户

发布于 2018-01-19 05:43:11

第一个答案很好(这让我们可以比较结果),但我不能安装BCMath。所以,我找到了这个函数:

代码语言:javascript
复制
function my_base_convert($numstring, $frombase, $tobase) 
{
  $chars = "0123456789abcdefghijklmnopqrstuvwxyz";
  $tostring = substr($chars, 0, $tobase);

  $length = strlen($numstring);
  $result = '';
  for ($i = 0; $i < $length; $i++)
  {
      $number[$i] = strpos($chars, $numstring{$i});
  }
  do
  {
    $divide = 0;
    $newlen = 0;
    for ($i = 0; $i < $length; $i++)
    {
        $divide = $divide * $frombase + $number[$i];
        if ($divide >= $tobase)
        {
            $number[$newlen++] = (int)($divide / $tobase);
            $divide = $divide % $tobase;
        } elseif ($newlen > 0)
        {
            $number[$newlen++] = 0;
        }
    }
    $length = $newlen;
    $result = $tostring{$divide} . $result;
  } while ($newlen != 0);
  return $result;
}

echo my_base_convert($bignum, 10, 16);

转换为十六进制的示例$bignum与第一个答案中的相同: b1cf5653e79bef001acfb0f99d1f34487d16a8253e3a9971e98d46382114e8ac81b5102ab3c56be1f77d0eb754f566c0dacb23d64755e823f35411f9e14c5617

https://magp.ie/2015/09/30/convert-large-integer-to-hexadecimal-without-php-math-extension/中找到的函数(但示例中有一个小错误:"16,10“而不是"10,16")

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

https://stackoverflow.com/questions/14539727

复制
相关文章

相似问题

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