以下语句生成的最大字符数是多少?我需要正确地格式化输出。
echo base_convert(sprintf('%u',crc32($_string)),10,36);发布于 2010-02-26 01:15:40
crc32($_string)以32位整数形式返回CRC,其最大值为0xFFFFFFFFF,十进制为4294967295。
sprintf('%u',crc32($_string))将返回上面的值,解释为unsigned int。
base_convert(sprintf('%u',crc32($_string)),10,36)这将把先前返回的int从基数10转换为基数36。现在是4294967295 in base 10 = 1z141z3 in base 36,它有7个字符的长度。所以看起来最大长度是7个字符。
发布于 2010-02-26 01:38:06
我看到您已经有了答案,但我想推广一下解决方案。
问题是需要多少个基数36位才能表示具有32个基数2位(即位)的数。与中间的基数10之间的转换与问题无关。
位数由所需基数中的数字的对数决定。我们知道以2为底的对数是32,那么以36为底的对数是多少?
32 * log(2) / log(36)我的计算器给我的是6.1896449左右。因为我们不能处理部分数字,所以你需要四舍五入到7。这也解释了为什么6位数字在大多数情况下是有效的。
https://stackoverflow.com/questions/2335822
复制相似问题