gpt4 book ai didi

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

转载 作者:qq735679552 更新时间:2022-09-27 22:32:09 26 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章php实现的任意进制互转类分享由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
<?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实现的任意进制互转类分享的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com