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

posted @   Athrun  阅读(1457)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 字符编码:从基础到乱码解决
历史上的今天:
2014-01-08 PHP工程师笔试题
2014-01-08 [转]InnoDB和MyISAM区别
2014-01-08 [转]XCache 3.0.0 发布,PHP 性能提升方案
2009-01-08 MS SQL2000 && 2005转出数据字典
2008-01-08 改善用户体验之alert提示效果
2008-01-08 如何在网页中插入Flv视频文件
2008-01-08 ASP在线转flv+所略图+flash在线录制视频
点击右上角即可分享
微信分享提示