16进制字符串转36进制字符串

PHP任意进制之间转换数字base_convert
http://php.net/manual/zh/function.base-convert.php

实际测试时因为有精度留失的问题,会导致换错误。
Warning
由于使用内部的 "double" 或 "float" 类型,base_convert() 的操作可能会导致大数值中的精度丢失。请参见本手册的 浮点数 章节以便获得更多详细信息。

$s = 'BE55D904-1F35-4838-8F8F-B27EDEA9DFAB';
$sha1 = sha1($s);
echo $sha1;
echo '<br />';
$sha36 = str_baseconvert($sha1, 16, 36);
echo $sha36;
echo '<br />';
$sha1 = str_baseconvert($sha36, 36, 16);
echo $sha1;
echo '<br />';

function str_baseconvert($str, $frombase=10, $tobase=36) { 
  $str = trim($str); 
  if (intval($frombase) != 10) { 
    $len = strlen($str); 
    $q = 0; 
    for ($i=0; $i<$len; $i++) { 
      $r = base_convert($str[$i], $frombase, 10); 
      $q = bcadd(bcmul($q, $frombase), $r); 
    } 
  } 
  else $q = $str;

  if (intval($tobase) != 10) { 
    $s = ''; 
    while (bccomp($q, '0', 0) > 0) { 
      $r = intval(bcmod($q, $tobase)); 
      $s = base_convert($r, 10, $tobase) . $s; 
      $q = bcdiv($q, $tobase, 0); 
    } 
  } 
  else $s = $q;

  return $s; 
}

 

BC数学函数
http://php.net/manual/zh/ref.bc.php

转载于:https://www.cnblogs.com/Athrun/p/base_convert.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值