gpt4 book ai didi

python - Python hash() 函数的正整数

转载 作者:IT老高 更新时间:2023-10-28 20:54:18 27 4
gpt4 key购买 nike

我想使用 Python hash() 函数从对象中获取整数哈希值。但是内置的 hash() 可以给出负值,我只想要正值。我希望它在 32 位和 64 位平台上都能正常工作。

即在 32 位 Python 上,hash() 可以返回 -2**312**31 - 1 范围内的整数。在 64 位系统上,hash() 可以返回 -2**632**63 - 1 范围内的整数。

但我想要在 32 位系统上的 02**32-1 范围内的哈希,以及 02**64-1 在 64 位系统上。

在 32 位或 64 位目标平台范围内,将哈希值转换为其等效正值的最佳方法是什么?

(上下文:我正在尝试创建一个新的 random.Random 样式类。根据 random.Random.seed() docs ,种子“可选参数 x 可以是任何可散列对象。”所以我'我想复制那个功能,除了我的种子算法不能处理负整数值,只能处理正整数。)

最佳答案

使用 sys.maxsize :

>>> import sys
>>> sys.maxsize
9223372036854775807L
>>> hash('asdf')
-618826466
>>> hash('asdf') % ((sys.maxsize + 1) * 2)
18446744073090725150L

使用 ctypes.c_size_t 的替代方法:

>>> import ctypes
>>> ctypes.c_size_t(hash('asdf')).value
18446744073090725150L

关于python - Python hash() 函数的正整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18766535/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com