之前不知道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 ; } } ?> |