Раньше я генерировал случайную строку следующим образом (теперь я переключился на этот метод ).
key = '%016x' % random.getrandbits(128)
Ключ, сгенерированный таким образом, чаще всего представляет собой строку из 32 символов, но как только у меня появляется 31 символ.
Вот чего я не понимаю: почему это 32 символа, а не 16 ? Разве одна шестнадцатеричная цифра не берет один символ для печати?
Так что, если я попрошу %016x
- разве нельзя ожидать шестнадцати символов с возможными ведущими нулями?
Почему длина строки не всегда одинакова?
Контрольный пример
import random
import collections
stats = collections.defaultdict(int)
for i in range(1000000):
key = '%016x' % random.getrandbits(128)
length = len(key)
stats[length] += 1
for key in stats:
print key, ' ', stats[key]
Печать:
32 937911
27 1
28 9
29 221
30 3735
31 58123