php 16进制转为62进制
62进制按这个排列:
$dict = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
请高手写个函数 输入16进制,输出62进制,不要用高精度数学函数,服务器禁用了.
回复讨论(解决方案)
五一都出去玩了???
<?php $dict = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; //$num=3844;//intval($_GET['hex'],16); for($test=0;$test<3844;$test++){ $num=$test; $index=0; do{ $cur=$num%62; $output[$index]=$dict[$cur]; //echo $output[$index].' '; $num=floor($num/62); $index++; //echo $cur.' '; }while($num); $output[$index]='!'; $index--; $aide=0; while($index>$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 '<br />'; }?>
我PHP不怎么熟,很多地方都是从C语言的角度去思考的,所以有的地方很别扭。另外我不能保证我写的这个东西没错误,PHP很多地方都很模糊。那个for是为了看看有没有错误的,3位以下的62进制数好像是没什么问题。
另外我不知道怎么把数组弄成字符串,楼主你自己弄去吧,我不想弄了。
还有超出整数的取值范围就会出问题了。如果想实现更大的数的转换,看看这个:
http://www.php.net/manual/en/book.bc.php
还有超出整数的取值范围就会出问题了。如果想实现更大的数的转换,看看这个:
http://www.php.net/manual/en/book.bc.php 你在捣到什么乱?
人家已经说了 不要用高精度数学函数,服务器禁用了
还有超出整数的取值范围就会出问题了。如果想实现更大的数的转换,看看这个:
http://www.php.net/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.net/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<strlen($s); $i++) $b .= sprintf('%04b', hexdec($s{$i})); while(strlen($b) >= $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<strlen($s); $i++) $b .= sprintf("%0{$to}b", strpos($dict, $s{$i})); while(strlen($b) > 4) { $res = $dict{bindec(substr($b, -4))} . $res; $b = substr($b, 0, -4); } if(bindec($b)) $res = $dict{bindec($b)} . $res; return $res;}
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<strlen($s); $i++) $b .= sprintf('%04b', hexdec($s{$i})); while(strlen($b) >= $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<strlen($s); $i++) $b .= sprintf("%0{$to}b", strpos($dict, $s{$i})); while(strlen($b) > 4) { $res = $dict{bindec(substr($b, -4))} . $res; $b = substr($b, 0, -4); } if(bindec($b)) $res = $dict{bindec($b)} . $res; return $res;}
3IWiroM3ly1itGhipJdx5x
ece926d8c0356205276a45266d361161
其实我是想用16位 md5 做成4位 64进制的短网址,尽管有很大几率些碰撞

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics



Alipay PHP...

Article discusses late static binding (LSB) in PHP, introduced in PHP 5.3, allowing runtime resolution of static method calls for more flexible inheritance.Main issue: LSB vs. traditional polymorphism; LSB's practical applications and potential perfo

JWT is an open standard based on JSON, used to securely transmit information between parties, mainly for identity authentication and information exchange. 1. JWT consists of three parts: Header, Payload and Signature. 2. The working principle of JWT includes three steps: generating JWT, verifying JWT and parsing Payload. 3. When using JWT for authentication in PHP, JWT can be generated and verified, and user role and permission information can be included in advanced usage. 4. Common errors include signature verification failure, token expiration, and payload oversized. Debugging skills include using debugging tools and logging. 5. Performance optimization and best practices include using appropriate signature algorithms, setting validity periods reasonably,

Session hijacking can be achieved through the following steps: 1. Obtain the session ID, 2. Use the session ID, 3. Keep the session active. The methods to prevent session hijacking in PHP include: 1. Use the session_regenerate_id() function to regenerate the session ID, 2. Store session data through the database, 3. Ensure that all session data is transmitted through HTTPS.

The application of SOLID principle in PHP development includes: 1. Single responsibility principle (SRP): Each class is responsible for only one function. 2. Open and close principle (OCP): Changes are achieved through extension rather than modification. 3. Lisch's Substitution Principle (LSP): Subclasses can replace base classes without affecting program accuracy. 4. Interface isolation principle (ISP): Use fine-grained interfaces to avoid dependencies and unused methods. 5. Dependency inversion principle (DIP): High and low-level modules rely on abstraction and are implemented through dependency injection.

How to automatically set the permissions of unixsocket after the system restarts. Every time the system restarts, we need to execute the following command to modify the permissions of unixsocket: sudo...

How to debug CLI mode in PHPStorm? When developing with PHPStorm, sometimes we need to debug PHP in command line interface (CLI) mode...

Static binding (static::) implements late static binding (LSB) in PHP, allowing calling classes to be referenced in static contexts rather than defining classes. 1) The parsing process is performed at runtime, 2) Look up the call class in the inheritance relationship, 3) It may bring performance overhead.
