каково максимальное количество символов, сгенерированных при преобразовании значения crc32 в базовые 10–36 - PullRequest
0 голосов
/ 25 февраля 2010

какое максимальное количество символов генерируется следующим оператором? мне нужно правильно отформатировать вывод.

echo base_convert(sprintf('%u',crc32($_string)),10,36);

Ответы [ 2 ]

3 голосов
/ 25 февраля 2010
crc32($_string)

возвращает CRC как 32-разрядное целое число, максимальное значение которого будет 0xFFFFFFFF, а в десятичном виде - 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 символов.

2 голосов
/ 25 февраля 2010

Я вижу, что у вас уже есть ответ, но я бы хотел обобщить решение.

Вопрос состоит в том, сколько базовых 36 цифр требуется для представления числа, имеющего 32 базовых 2 цифры (то есть биты). Преобразование в / из базы 10 в середине не имеет отношения к проблеме.

Количество цифр определяется логарифмом числа в желаемой базе. Мы знаем, что логарифм по основанию 2 равен 32, так что же такое логарифм по основанию 36?

32 * log(2) / log(36)

Мой калькулятор дает мне 6,1896449 или около того. Поскольку мы не можем иметь дело с частичными цифрами, вам нужно округлить до 7. Это также объясняет, почему 6 цифр работает большую часть времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...