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 相关文章推荐
php 实现进制转换(二进制、八进制、十六进制)互相转换实现代码
Oct 22 PHP
PHP编程最快明白(第一讲 软件环境和准备工作)
Oct 25 PHP
《PHP编程最快明白》第二讲 数字、浮点、布尔型、字符串和数组
Nov 01 PHP
实测在class的function中include的文件中非php的global全局环境
Jul 15 PHP
php版淘宝网查询商品接口代码示例
Jun 17 PHP
php设计模式之简单工厂模式详解
Sep 04 PHP
ThinkPHP表单自动验证实例
Oct 13 PHP
非常有用的9个PHP代码片段
Apr 06 PHP
PHP页面间传递值和保持值的方法
Aug 24 PHP
Zend Framework分发器用法示例
Dec 11 PHP
laravel migrate初学常见错误的解决方法
Oct 11 PHP
Laravel中Kafka的使用详解
Mar 24 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读取网页文件内容的实现代码(fopen,curl等)
2011/06/23 PHP
ThinkPHP中U方法的使用浅析
2014/06/13 PHP
一个图片地址分解程序(用于PHP小偷程序)
2014/08/23 PHP
php访问数组最后一个元素的函数end()用法
2015/03/18 PHP
php格式文件打开的四种方法
2018/02/24 PHP
PHP进阶学习之Geo的地图定位算法详解
2019/06/19 PHP
redis+php实现微博(一)注册与登录功能详解
2019/09/23 PHP
jquery $.getJSON()跨域请求
2011/12/21 Javascript
模拟一个类似百度google的模糊搜索下拉列表
2014/04/15 Javascript
JavaScript中使用指数方法Math.exp()的简介
2015/06/15 Javascript
使用ngView配合AngularJS应用实现动画效果的方法
2015/06/19 Javascript
js+div实现文字滚动和图片切换效果代码
2015/08/27 Javascript
angularjs学习笔记之简单介绍
2015/09/26 Javascript
Webpack 实现 Node.js 代码热替换
2015/10/22 Javascript
深入学习jQuery Validate表单验证(二)
2016/01/18 Javascript
JavaScript实现数组降维详解
2017/01/05 Javascript
node.js用fs.rename强制重命名或移动文件夹的方法
2017/12/27 Javascript
vue中子组件的methods中获取到props中的值方法
2018/08/27 Javascript
探秘vue-rx 2.0(推荐)
2018/09/21 Javascript
JavaScript学习笔记之基于定时器实现图片无缝滚动功能详解
2019/01/09 Javascript
如何修改Vue打包后文件的接口地址配置的方法
2020/04/22 Javascript
js+css实现扇形导航效果
2020/08/18 Javascript
[08:54]《一刀刀一天》之DOTA全时刻18:十九支奔赴西雅图队伍全部出炉
2014/06/04 DOTA
python端口扫描系统实现方法
2014/11/19 Python
Python rstrip()方法实例详解
2018/11/11 Python
python利用Excel读取和存储测试数据完成接口自动化教程
2020/04/30 Python
iframe跨域的几种常用方法
2019/11/11 HTML / CSS
英国性感内衣和睡衣品牌:Bluebella
2018/01/26 全球购物
什么是makefile? 如何编写makefile?
2012/08/08 面试题
校运会广播稿100字
2014/01/27 职场文书
应届毕业生自荐信例文
2014/02/26 职场文书
设计专业毕业生求职信
2014/06/25 职场文书
中国梦团日活动总结
2014/07/07 职场文书
通信工程求职信
2014/07/16 职场文书
民主生活会对照检查材料思想汇报
2014/09/27 职场文书
小学校长开学致辞
2015/07/29 职场文书