php实现的任意进制互转类分享


Posted in PHP onJuly 07, 2015

之前不知道php自带有base_convert可以实现任意进制之间的转换,自己写了一个。。。。

<?php 
/**
 * 进制转换类 
 * @author sgf@funcity
 * @version 2011-02-15
 */
Class Hex{
 
 private static $element = array(
 '0','1','2','3','4','5','6','7','8','9',
 'A','B','C','D','E','F','G','H','I','J',
 'K','L','M','N','O','P','Q','R','S','T',
 'U','V','W','X','Y','Z'
 );
 
 private static $hex_min = 2;
 private static $hex_max = 36;
 
 
 /**
 * 进制转换
 */
 public function conv($int,$out_hex,$in_hex=10,$use_system=true){
 
 if($use_system && function_exists('base_convert')){
  return strtoupper(base_convert($int,$in_hex,$out_hex));
 }
 
 if($out_hex == $in_hex){
  return $int;
 }
 if($out_hex > self::$hex_max || $out_hex < self::$hex_min){
  return false;
 }
 if($in_hex > self::$hex_max || $in_hex < self::$hex_min){
  return false;
 }
 $hex_10 = $this->_conv2hex10($int,$in_hex);
 return strtoupper($this->_conv_hex($hex_10,$out_hex));
 }
 
 /**
 * 将任意进制数字转为10进制数字
 */
 private function _conv2hex10($int,$in_hex){
 $int = strtoupper(trim($int));
 if($in_hex==10){
  return $int;
 }elseif( $in_hex== 2 && function_exists('bindec')){
  return bindec($int);
 } elseif($in_hex== 16 && function_exists('hexdec')){
  return hexdec($int);
 } elseif($in_hex== 8 && function_exists('octdec')){
  return octdec($int);
 }
 $array = array();
 $result = 0;
 for($i=0;$i<strlen($int);$i++){
  array_unshift( $array, substr($int,$i,1)); //插入到数组头部(既倒序)
 }
 foreach($array as $k => $v){
 
  $hex10_value = array_search($v,self::$element);
  if($hex10_value==-1){
  return false;
  }
  $result += intval( pow($in_hex,$k) * $hex10_value );
 
 }
 return $result;
 }
 
 /**
 * 把10进制数换成任意进制数
 */
 private function _conv_hex($hex_10,$out_hex){
 
 $hex_10 = intval($hex_10);
 
 if($out_hex==10){
  return $hex_10;
 }else if( $out_hex==2  && function_exists('decbin')){
  return decbin($hex_10);
 } elseif ( $out_hex ==16 && function_exists('dechex')){
  return dechex($hex_10);
 } elseif ( $out_hex ==8 && function_exists('decoct')){
  return decoct($hex_10);
 }
 
 $array = array();
 $result = ""; 
 
 //利用10进制数除任意进制数 倒取余数法转换。
 do {
  array_unshift( $array, $hex_10 % $out_hex); //余数插入到数组数组第1个位置。
  $hex_10 = $hex_10 / $out_hex ; //除法
 } while ($hex_10>1);
 
 foreach($array as $k){
  $result .= self::$element[$k]; 
 }
 return $result; 
 }
 
 
}
?>
PHP 相关文章推荐
一个用于MySQL的PHP XML类
Oct 09 PHP
php中去除所有js,html,css代码
Oct 12 PHP
php生成图形验证码几种方法小结
Aug 15 PHP
ThinkPHP模版引擎之变量输出详解
Dec 05 PHP
微信公众平台开发实现2048游戏的方法
Apr 15 PHP
php使用for语句输出三角形的方法
Jun 09 PHP
PHP整合PayPal支付
Jun 11 PHP
php使用file函数、fseek函数读取大文件效率对比分析
Nov 04 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
Jul 19 PHP
PHP简单实现欧拉函数Euler功能示例
Nov 06 PHP
TP(thinkPHP)框架多层控制器和多级控制器的使用示例
Jun 13 PHP
在 PHP 和 Laravel 中使用 Traits的方法
Nov 13 PHP
Apache服务器下防止图片盗链的办法
Jul 06 #PHP
php获取指定(访客)IP所有信息(地址、邮政编码、国家、经纬度等)的方法
Jul 06 #PHP
php实现搜索一维数组元素并删除二维数组对应元素的方法
Jul 06 #PHP
jquery+php实现导出datatables插件数据到excel的方法
Jul 06 #PHP
php导出中文内容excel文件类实例
Jul 06 #PHP
PHP伪造来源HTTP_REFERER的方法实例详解
Jul 06 #PHP
PHP 错误处理机制
Jul 06 #PHP
You might like
PHP安装攻略:常见问题解答(三)
2006/10/09 PHP
PHP iconv 函数转gb2312的bug解决方法
2009/10/11 PHP
测试PHP连接MYSQL成功与否的代码
2013/08/16 PHP
php 批量添加多行文本框textarea一行一个
2014/06/03 PHP
js 阻止子元素响应父元素的onmouseout事件具体实现
2013/12/23 Javascript
node.js中实现同步操作的3种实现方法
2014/12/05 Javascript
使用Browserify配合jQuery进行编程的超级指南
2015/07/28 Javascript
jQuery zclip插件实现跨浏览器复制功能
2015/11/02 Javascript
史上最全JavaScript数组去重的十种方法(推荐)
2017/08/17 Javascript
jquery+ajaxform+springboot控件实现数据更新功能
2018/01/22 jQuery
原生JS实现的跳一跳小游戏完整实例
2019/01/27 Javascript
Vue快速实现通用表单验证功能
2019/12/05 Javascript
Python datetime时间格式化去掉前导0
2014/07/31 Python
Python实现115网盘自动下载的方法
2014/09/30 Python
python通过函数属性实现全局变量的方法
2015/05/16 Python
对Python 语音识别框架详解
2018/12/24 Python
Python使用random模块生成随机数操作实例详解
2019/09/17 Python
torchxrayvision包安装过程(附pytorch1.6cpu版安装)
2020/08/26 Python
Python爬虫开发与项目实战
2020/12/16 Python
CSS3中线性颜色渐变的一些实现方法
2015/07/14 HTML / CSS
利用Canvas模仿百度贴吧客户端loading小球的方法示例
2017/08/13 HTML / CSS
SkinCeuticals官网:美国药妆品牌
2018/04/19 全球购物
产品工艺师的岗位职责
2013/11/15 职场文书
优秀共产党员先进事迹
2014/01/27 职场文书
如何写好优秀的创业计划书
2014/01/30 职场文书
2014年教师党员公开承诺书
2014/05/28 职场文书
校园文明标语
2014/06/13 职场文书
教师党员学习群众路线心得体会
2014/11/04 职场文书
2014年教师工作总结
2014/11/10 职场文书
医院保洁员岗位职责
2015/02/13 职场文书
努力学习保证书
2015/02/26 职场文书
2015年会计年终工作总结
2015/05/26 职场文书
小学生法制教育心得体会
2016/01/14 职场文书
详解Vue的options
2021/05/15 Vue.js
Python基于百度API识别并提取图片中文字
2021/06/27 Python
Java异常处理try catch的基本用法
2021/12/06 Java/Android