Я хочу использовать функцию Python hash()
для получения целых хэшей из объектов. Но встроенный hash()
может давать отрицательные значения, и я хочу только положительный. И я хочу, чтобы он работал разумно на 32-битных и 64-битных платформах.
т.е. на 32-битном Python, hash()
может возвращать целое число в диапазоне от -2**31
до 2**31 - 1
.
В 64-битных системах hash()
может возвращать целое число в диапазоне от -2**63
до 2**63 - 1
.
Но я хочу хэш в диапазоне от 0
до 2**32-1
в 32-битных системах и 0
до 2**64-1
в 64-битных системах.
Каков наилучший способ преобразования хеш-значения в его эквивалентное положительное значение в диапазоне 32- или 64-битной целевой платформы?
(Контекст: я пытаюсь создать новый класс стиля random.Random
. В соответствии с random.Random.seed()
docs семенной "необязательный аргумент x" может быть любой хешируемый объект ". Поэтому я хотел бы дублировать эту функциональность, за исключением того, что мой алгоритм семени не может обрабатывать отрицательные целочисленные значения, только положительные.)