码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2016-01-08 13:02:46      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:

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

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

标签:

原文地址:http://www.cnblogs.com/Athrun/p/base_convert.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!