Bir CRC32 değerinin bir baz 10-36 dönüşüm ile üretilen maksimum karakter ne

2 Cevap php

Aşağıdaki deyimi tarafından üretilen maksimum karakter sayısı nedir? i düzgün çıkışı biçimlendirmek gerekir.

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

2 Cevap

crc32($_string)

olan maksimum değeri onluk 4294967295 olduğunu 0xFFFFFFFF olacak 32-bit tamsayı olarak CRC döndürür.

sprintf('%u',crc32($_string))

Imzasız int olarak yorumlanır yukarıdaki değerini dönecektir.

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

This will convert the previously returned int from base 10 to base 36. Now 4294967295 in base 10 = 1z141z3 in base 36, which is 7 char long. So looks like the MAX length will be 7 char.

Ben zaten bir cevabı olduğunu görmek, ama ben çözümü genellemek istiyorum.

Soru 36 hane 32 base 2 basamak (yani bit) sahip bir dizi temsil etmek için gerekli kaç temelidir. Orta taban 10 / 'e dönüşüm problemine ilgisi yoktur.

Basamak sayısı istenen baz sayısının logaritmasının belirlenir. Biz taban 2 logaritma 32 olduğunu biliyorum, bu yüzden baz 36 logaritma nedir?

32 * log(2) / log(36)

Benim hesap bana 6.1896449 ya da öylesine verir. Bu kısmi basamak ile baş edemez beri, sen 7'ye kadar yuvarlamak gerekir. 6 hane çoğu zaman işleri yüzden de açıklıyor.