我目前在PHP中将base10数字转换成base64。但是我没有任何想法在php中将base64转换为base10!
我该怎么做呢?
我将base10转换为base64的算法如下:
$rep = array('0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','-','_');
$new = "";
while ($num>0) {
$r = $num % 64;
$new .= $rep[$r];
$num = floor($num/64);
}
发布于 2012-06-09 03:19:20
这是一种Javascript的方式。也许你可以为php编写一个。
var ALPHABET = {'-': 62, '1': 53, '0': 52, '3': 55, '2': 54, '5': 57, '4': 56, '7': 59, '6': 58, '9': 61, '8': 60, 'A': 0, 'C': 2, 'B': 1, 'E': 4, 'D': 3, 'G': 6, 'F': 5, 'I': 8, 'H': 7, 'K': 10, 'J': 9, 'M': 12, 'L': 11, 'O': 14, 'N': 13, 'Q': 16, 'P': 15, 'S': 18, 'R': 17, 'U': 20, 'T': 19, 'W': 22, 'V': 21, 'Y': 24, 'X': 23, 'Z': 25, '_': 63, 'a': 26, 'c': 28, 'b': 27, 'e': 30, 'd': 29, 'g': 32, 'f': 31, 'i': 34, 'h': 33, 'k': 36, 'j': 35, 'm': 38, 'l': 37, 'o': 40, 'n': 39, 'q': 42, 'p': 41, 's': 44, 'r': 43, 'u': 46, 't': 45, 'w': 48, 'v': 47, 'y': 50, 'x': 49, 'z': 51};
function decode(s) {
var n = 0;
for(var i=0; i < s.length; i++) {
var c = s.charAt(i);
n = n * 64 + ALPHABET[c];
}
return n;
}
console.log(decode('EqfyK'));
发布于 2015-08-15 09:02:21
下面是Steve答案中的Javascript的PHP版本:
function lengthen($id) {
$alphabet='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-';
$number=0;
foreach(str_split($id) as $letter) {
$number=($number*64) + strpos($alphabet,$letter);
}
return $number;
}
请注意,字母表与您的不同。字母表基于这里的答案:Base10 to base64 url shortening
发布于 2012-07-17 11:25:45
如果您正在尝试编写使用数字文字进行基本转换的PHP代码,那么这可能是不可能的。
PHP似乎并不实际处理十六进制文字(或八进制)。显然,在解析十六进制时,PHP在使用之前会在内部将十六进制转换为十进制!
这里有几个场景来演示这一点。(查看PHP: Integers - Manual以查看数值文字所使用的符号。)
回声
在输出之前,数字文本被解析为它们的十进制等效值。
// code output
echo 26; // 26
echo 0x1A; // 26
基数转换
使用PHP的函数base_convert()
更好地演示了PHP如何在使用前将十六进制解释为十进制。(请查看PHP: base_convert - Manual。)
对于标准用法,我们将十六进制0x1A转换为十进制,反之亦然。
echo base_convert('0x1A', 16, 10); // 26
echo base_convert('26', 16, 10); // 1a
现在对于非标准用法,十进制到十六进制可以很好地工作,但反之亦然。
echo base_convert(0x1A, 16, 10); // 38
echo base_convert(26, 10, 16); // 1a
显然,十六进制0x1A
在使用前会在内部转换为十进制26
。这可以通过将十六进制'26'
转换为十进制来演示。
echo base_convert(0x1A, 16, 10); // 38
echo base_convert(26, 16, 10); // 38
https://stackoverflow.com/questions/10954803
复制相似问题