> 백엔드 개발 > PHP 튜토리얼 > PHP 16진수 변환 예제에 대한 자세한 설명

PHP 16진수 변환 예제에 대한 자세한 설명

墨辰丷
풀어 주다: 2023-03-28 06:56:02
원래의
1646명이 탐색했습니다.

이 글은 주로 PHP 베이스 변환을 소개하고, 구체적인 예시를 바탕으로 2, 8, 16, 36, 64 베이스 변환의 구현 기술을 분석합니다. 도움이 필요한 친구들은 참고할 수 있습니다. 이 문서의 예제에서는 PHP 기본 변환을 설명합니다. 참고를 위해 모든 사람과 공유하세요. 세부 사항은 다음과 같습니다.


실현 가능:

십진수 변환 2, 8, 16, 36, 62 진법

2, 8, 16, 36, 62 진법 변환 10

주의할 점은 2, 8, 16개의 16진수를 변환할 때 시스템 자체 기능을 사용한다는 점입니다.

그러니까 아무리 고정밀도 변환값이라 하더라도 2147483646보다 클 수도 있습니다.

또한,

16진수 저정밀도 변환, 최대값: 2147483646;

16진수 고정밀도 변환, 최대값: 77309411327

16진수 고정밀도 변환, 최대값: 133143986175;

jinzhi.php 파일, 데모 기능이 함께 제공됩니다.

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);

?>

로그인 후 복사

위 내용은 이 글의 전체 내용이며, 모든 분들의 공부에 도움이 되었으면 좋겠습니다.


관련 권장 사항:

텍스트 파일과 바이너리

파일의 차이점

바이너리

바이트 스트림 데이터를 보내고 받는 Ajax 방법
PHP 구현 10

기본

, 바이너리 기수 , 8진수 기수 및 16진수 기수 관련 함수 변환 방법

위 내용은 PHP 16진수 변환 예제에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿