如何使用hash3散列整数和字符串输入

2024-05-31 23:24:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在寻找字符串和整数输入的哈希值。 使用Hash3,我可以对字符串而不是整数执行此操作:

pip install murmurhash3
import mmh3
mmh3.hash(34)

返回以下错误:

TypeError: a bytes-like object is required, not 'int'

我可以将其转换为如下字节:

mmh3.hash(bytes(34))

但是如果输入是字符串,我会得到一条错误消息

如何在不将整数转换为字符串的情况下克服此问题


Tags: installpip字符串importbytesobjectis错误
1条回答
网友
1楼 · 发布于 2024-05-31 23:24:53

How do I overcome this without converting the integer to string?

你不能。或者更准确地说,您需要以某种方式将其转换为bytesstr,但它不需要像b'34'/'34'那样是人类可读的文本形式。Python 3上的一种常见方法是:

my_int = 34  # Or some other value
my_int_as_bytes = my_int.to_bytes((my_int.bit_length() + 7) // 8, 'little')

它使原始int(不考虑长度)的原始字节表示最少化;对于34,您将得到b'"'(因为它只需要一个字节来存储它,所以您基本上得到的是一个带有序号值的bytes对象),但是对于较大的int,它仍然有效(不像用chr乱来乱来),并且它总是尽可能小(每个字节获得8位数据,而不是转换为文本字符串时每个字节超过3位的标题)

如果您使用的是Python 2(为什么?!?它已经停止使用将近一年),int.to_bytes不存在,但是您可以通过各种方式以中等效率伪造它,例如(仅处理非负值,而to_bytes使用简单的标志处理有符号值):

 from binascii import unhexlify

 my_int_as_bytes = unhexlify('%x' % (my_int,))

相关问题 更多 >