一个非常好的16进制转62进制PHP函数,谁有ASP版,或参照这个Php版整一个??
luok 2014-01-03 04:44:54 这是一个16进制62进制互转的PHP程序,很强大啊,谁能帮忙参照这个,改一个ASP/vb版?多谢
这个很好用,一下就能把%E8%BF%9B%E5%88.htm这种地址变短,同时里面DICT可以按需打乱顺序,别人也不可能知道你地址代表什么中文。
得到一个32位的16进制测试串
$c = md5('ffff');
echo $c, PHP_EOL;
echo $r = convert($c, 62), PHP_EOL;
echo convert($r, -62);
function convert($s, $to=62) {
$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;
}