当前位置:Gxlcms > PHP教程 > php16进制转为62进制

php16进制转为62进制

时间:2021-07-01 10:21:17 帮助过:9人阅读

62进制按这个排列:
	$dict = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';

请高手写个函数 输入16进制,输出62进制,不要用高精度数学函数,服务器禁用了.


回复讨论(解决方案)

五一都出去玩了???

$aide){			$tmp=$output[$index];			$output[$index]=$output[$aide];			$output[$aide]=$tmp;			$aide++;			$index--;		}		$index=0;		while($output[$index]<>'!'){			echo $output[$index];			$index++;		}		if(($test+1)%62==0)			echo '
'; }?>


我PHP不怎么熟,很多地方都是从C语言的角度去思考的,所以有的地方很别扭。另外我不能保证我写的这个东西没错误,PHP很多地方都很模糊。那个for是为了看看有没有错误的,3位以下的62进制数好像是没什么问题。

另外我不知道怎么把数组弄成字符串,楼主你自己弄去吧,我不想弄了。

还有超出整数的取值范围就会出问题了。如果想实现更大的数的转换,看看这个:
http://www.php.com/manual/en/book.bc.php

还有超出整数的取值范围就会出问题了。如果想实现更大的数的转换,看看这个:
http://www.php.com/manual/en/book.bc.php 你在捣到什么乱?
人家已经说了 不要用高精度数学函数,服务器禁用了


还有超出整数的取值范围就会出问题了。如果想实现更大的数的转换,看看这个:
http://www.php.com/manual/en/book.bc.php 你在捣到什么乱?
人家已经说了 不要用高精度数学函数,服务器禁用了
我忘了,那么几行代码我写了半天,然后我在试大数的时候才发现会出错的。

楼主你要转换的十六进制数会超过整形数据的最大值么?

这个可能不需要BCMath,不过我没试:
http://phpseclib.bantux.org/code_coverage/220/PHP-5.2/Math_BigInteger.php.html

楼主你要转换的十六进制数会超过整形数据的最大值么?

不会的 ,那个16进制数 其实就是一个md5 加密后的结果


楼主你要转换的十六进制数会超过整形数据的最大值么?

不会的 ,那个16进制数 其实就是一个md5 加密后的结果
MD5那么多位怎么可能不超过整形的表示范围?
上面那个链接里的代码好像不能下载,这个可以下载:
http://pear.php.com/package/Math_BigInteger/download

不会的 ,那个16进制数 其实就是一个md5 加密后的结果
那么为什么要是 62 进制呢?64 进制不好吗?
因为你不过只是想紧缩一下 MD5 的结果
测试代码

$c = md5('ffff');echo $c, PHP_EOL;echo $r = convert($c, 64), PHP_EOL;echo convert($r, -64);function convert($s, $to=64) {  $dict = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ@=';  $res = '';  $b = '';  if($to > 0) {    $to = ceil(log($to, 2));//调整到2的k次方    for($i=0; $i= $to) {      $res = $dict{bindec(substr($b, -$to))} . $res;      $b = substr($b, 0, -$to);    }    $res = $dict{bindec($b)} . $res;    return $res;  }  $to = ceil(log(-$to, 2));  for($i=0; $i 4) {    $res = $dict{bindec(substr($b, -4))} . $res;    $b = substr($b, 0, -4);  }  if(bindec($b)) $res = $dict{bindec($b)} . $res;  return $res;}
ece926d8c0356205276a45266d361161
3IWiroM3ly1itGhipJdx5x
ece926d8c0356205276a45266d361161

太高级了。小老伯路过。不过也学到一个关键词,叫高精度数学。今晚研究下。

好像有函数的,按什么转都行的。


不会的 ,那个16进制数 其实就是一个md5 加密后的结果
那么为什么要是 62 进制呢?64 进制不好吗?
因为你不过只是想紧缩一下 MD5 的结果
测试代码

$c = md5('ffff');echo $c, PHP_EOL;echo $r = convert($c, 64), PHP_EOL;echo convert($r, -64);function convert($s, $to=64) {  $dict = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ@=';  $res = '';  $b = '';  if($to > 0) {    $to = ceil(log($to, 2));//调整到2的k次方    for($i=0; $i= $to) {      $res = $dict{bindec(substr($b, -$to))} . $res;      $b = substr($b, 0, -$to);    }    $res = $dict{bindec($b)} . $res;    return $res;  }  $to = ceil(log(-$to, 2));  for($i=0; $i 4) {    $res = $dict{bindec(substr($b, -4))} . $res;    $b = substr($b, 0, -4);  }  if(bindec($b)) $res = $dict{bindec($b)} . $res;  return $res;}
ece926d8c0356205276a45266d361161
3IWiroM3ly1itGhipJdx5x
ece926d8c0356205276a45266d361161



其实我是想用16位 md5 做成4位 64进制的短网址,尽管有很大几率些碰撞

人气教程排行