Home > Backend Development > PHP Tutorial > Detailed explanation of PHP hexadecimal conversion examples

Detailed explanation of PHP hexadecimal conversion examples

墨辰丷
Release: 2023-03-28 06:56:02
Original
1645 people have browsed it

This article mainly introduces PHP base conversion, and analyzes the implementation techniques of 2, 8, 16, 36, 64 base to 10 base conversion based on specific examples. It has certain reference value. Friends who need it can Refer to the example below

This article describes PHP base conversion. Share it with everyone for your reference, the details are as follows:

can be realized:

Convert 10 to 2, 8, 16, 36, 62 hexadecimal

2 , 8, 16, 36, 62 hexadecimal conversion to decimal

Please note that when converting 2, 8, 16 hexadecimal, the system's own function is used.

So, no matter how high-precision conversion value is, it may be greater than 2147483646.

In addition,

32 base low precision conversion, maximum value: 2147483646;
32 base high precision conversion, maximum value: 77309411327;
64 base high precision conversion , maximum value: 133143986175.

jinzhi.php file, comes with demo function.

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

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

<?php

$mtime1 = explode(" ", microtime());

$startTime = $mtime1[0] + $mtime1[1];

?>

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />

<title>进制转换/title>

</head>

<body>

<form id="jzh" name="jinzhih" method="post" action="">

<input name="go" type="hidden" value="100">

<table width="482" border="1" cellpadding="0" cellspacing="0" bordercolor="#FFE8E8" bgcolor="#F4F8FB">

 <tr>

  <td width="194"><select name="jinzhi0" id="jinzhi0">

  <option value="2">2</option>

  <option value="8">8</option>

  <option value="10" selected="selected">10</option>

  <option value="16">16</option>

  <option value="36">36</option>

  <option value="62">62</option>

  </select>

进制</td>

 <td width="275"><input name="zhi" type="text" id="zhi" /></td>

 </tr>

 <tr>

  <td>进行<input name="lx" type="radio" value="0" checked="checked" />

普通<input type="radio" name="lx" value="1" />高精</td><td> </td>

 </tr>

 <tr>

  <td>转换为

  <select name="jinzhi1" id="jinzhi1">

   <option value="2" selected="selected">2</option>

   <option value="8">8</option>

   <option value="10">10</option>

   <option value="16">16</option>

   <option value="36">36</option>

   <option value="62">62</option>

  </select>进制,</td><td>总长度为

  <input name="changdu" type="text" id="changdu" value="10" size="4" maxlength="2" />

字符。</td></tr><tr>

 <td><input type="submit" name="Submit" value="提交" /></td>

 <td><input type="reset" name="Submit2" value="重置" /></td>

 </tr></table>

 <p>注意:仅能进行10进制转换为2、8、16、36、62进制;或反转换。</p></form>

<?php

class jinzhi_class

{

   //10进制转2、8、16、36、62进制

   function jinzhih_0($shu,$jinzhi,$w)

   {

   $zifu = "";

   while ($shu!=0){

   $linshi = $shu%$jinzhi;

   switch ($jinzhi){

    case 2:

     $zifu = decbin($shu);

     return $zifu;

    case 8:

     $zifu = decoct($shu);

     return $zifu;

    case 16:

     $zifu = dechex($shu);

     return $zifu;

    case 36:

     if ($linshi>=10)

     {

     $zifu.= chr(($linshi+55));

     }else{

      $zifu.= $linshi;}

     break;

    case 62:

     if (($linshi>=10) && ($linshi36)) {$zifu.= chr($linshi+55);break;}

     if (($linshi>=36) && ($linshi62)) {$zifu.= chr($linshi+61);break;}

     $zifu.= $linshi;break;

   default:

   $zifu.= $linshi;

   break;

   }

   $shu = intval($shu/$jinzhi);

   }

   for ($i=strlen($zifu);$i$w;$i++)

   $zifu.="0";

  return strrev($zifu);}

   //2、8、16、36、62进制转10进制

   function jinzhih_1($zifu,$jinzhi,$w)

 { $shu=0;

  for ($i=0;$i=strlen($zifu)-1;$i++)

     {

     $linshi = substr($zifu,$i,1);

     switch ($jinzhi){

      case 2:

       $shu = bindec($zifu);

       $i=strlen($zifu)+1;

       break;

      case 8:

       $shu = octdec($zifu);

      $i=strlen($zifu)+1;

      break;

      case 16:

       $shu = hexdec($zifu);

       $i=strlen($zifu)+1;

       break;

     case 36:

      if (ord($linshi)=57)

      {$shu+=(ord($linshi)-48)*pow($jinzhi,strlen($zifu)-$i-1);

     }else{

       $shu=$shu + (ord($linshi)-55)*pow($jinzhi,strlen($zifu)-$i-1);}

       break;

     case 62:

      if (ord($linshi)=57)

      {$shu+=$linshi*pow($jinzhi,strlen($zifu)-$i-1);    

     }elseif ((ord($linshi)>=65) && (ord($linshi)=90)){

      $shu+= (ord($linshi)-55)*pow($jinzhi,strlen($zifu)-$i-1);

      }else{

      $shu+= (ord($linshi)-61)*pow($jinzhi,strlen($zifu)-$i-1);}

      break;

     }

   }

   return $shu;

   }

   //10进制高精度转换2、8、16、36、62进制

   function jinzhih_G0($shu,$jinzhi,$w)

   {

   $zifu = "";

   while ($shu!=0){

   $linshi = bcmod($shu,$jinzhi);

   switch ($jinzhi){

    case 2:

     $zifu = decbin($shu);

     return $zifu;

    case 8:

     $zifu = decoct($shu);

     return $zifu;

    case 16:

     $zifu = dechex($shu);

     return $zifu;

    case 36:

     if ($linshi>=10)

     {

     $zifu.= chr(($linshi+55));

     }else{

      $zifu.= $linshi;}

     break;

    case 62:

     if (($linshi>=10) && ($linshi36)) {$zifu.= chr($linshi+55);break;}

     if (($linshi>=36) && ($linshi62)) {$zifu.= chr($linshi+61);break;}

     $zifu.= $linshi;break;

   default:

   $zifu.= $linshi;

   break;

   }

   $shu = intval(bcp($shu,$jinzhi));

   }

   for ($i=strlen($zifu);$i$w;$i++)

   $zifu.="0";

  return strrev($zifu);}

   //2、8、16、36、62进制高精度转换10进制

   function jinzhih_G1($zifu,$jinzhi,$w)

 { $shu= "";

  for ($i=0;$i=strlen($zifu)-1;$i++)

     {

     $linshi = substr($zifu,$i,1);

     switch ($jinzhi){

      case 2:

       $shu = bindec($zifu);

       $i=strlen($zifu)+1;

       break;

      case 8:

       $shu = octdec($zifu);

      $i=strlen($zifu)+1;

      break;

      case 16:

       $shu = hexdec($zifu);

       $i=strlen($zifu)+1;

       break;

     case 36:

      if (ord($linshi)=57)

      {$shu=bcadd($shu,bcmul((ord($linshi)-48),bcpow($jinzhi,strlen($zifu)-$i-1)));

     }else{

       $shu=bcadd($shu,bcmul((ord($linshi)-55),bcpow($jinzhi,strlen($zifu)-$i-1)));}

       break;

     case 62:

      if (ord($linshi)=57)

      {$shu=bcadd($shu,bcmul($linshi,bcpow($jinzhi,strlen($zifu)-$i-1)));

     }elseif ((ord($linshi)>=65) && (ord($linshi)=90)){

      $shu=bcadd($shu,bcmul((ord($linshi)-55),bcpow($jinzhi,strlen($zifu)-$i-1)));

      }else{

      $shu=bcadd($shu,bcmul((ord($linshi)-61),bcpow($jinzhi,strlen($zifu)-$i-1)));

      }

      break;

     }

   }

   return $shu;}

}

if (isset($_GET["p"]))

{if ($_GET["p"]==="1"){

echo "";

echo "提示:

";

echo "32进制低精转换,最大值:2147483646

";

echo "32进制高精转换,最大值:77309411327

";

echo "64进制高精转换,最大值:133143986175

";

echo "";

echo "值为:";

$Fs = new jinzhi_class();

if ($_POST[&#39;lx&#39;]=="0" && $_POST[&#39;jinzhi0&#39;]=="10")

{echo $Fs->jinzhih_0($_POST[&#39;zhi&#39;],$_POST[&#39;jinzhi1&#39;],$_POST[&#39;changdu&#39;])."

";}

if ($_POST[&#39;lx&#39;]=="1" && $_POST[&#39;jinzhi0&#39;]=="10")

{echo $Fs->jinzhih_G0($_POST[&#39;zhi&#39;],$_POST[&#39;jinzhi1&#39;],$_POST[&#39;changdu&#39;]);}

if ($_POST[&#39;lx&#39;]=="0" && $_POST[&#39;jinzhi0&#39;]>"10")

{echo $Fs->jinzhih_1($_POST[&#39;zhi&#39;],$_POST[&#39;jinzhi0&#39;],$_POST[&#39;changdu&#39;]);}

if ($_POST[&#39;lx&#39;]=="1" && $_POST[&#39;jinzhi0&#39;]>"10")

{echo $Fs->jinzhih_G1($_POST[&#39;zhi&#39;],$_POST[&#39;jinzhi0&#39;],$_POST[&#39;changdu&#39;]);}

}

echo "";}

$mtime1 = explode(" ", microtime());

$endTime = $mtime1[0] + $mtime1[1];

printf ("页面执行时间:%.6fs.",$endTime-$startTime);

?>

Copy after login

The above is the entire content of this article, I hope it will be helpful to everyone's study.


Related recommendations:

The difference between text files and binary files

Ajax sends and receives binary Method of byte stream data

PHP implements decimal ##, binary base, eight base and hexadecimal baseMethods for converting related functions

The above is the detailed content of Detailed explanation of PHP hexadecimal conversion examples. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template