2024-05-31 23:24:53 发布
网友
我正在寻找字符串和整数输入的哈希值。 使用Hash3,我可以对字符串而不是整数执行此操作:
pip install murmurhash3 import mmh3 mmh3.hash(34)
返回以下错误:
TypeError: a bytes-like object is required, not 'int'
我可以将其转换为如下字节:
mmh3.hash(bytes(34))
但是如果输入是字符串,我会得到一条错误消息
如何在不将整数转换为字符串的情况下克服此问题
How do I overcome this without converting the integer to string?
你不能。或者更准确地说,您需要以某种方式将其转换为bytes或str,但它不需要像b'34'/'34'那样是人类可读的文本形式。Python 3上的一种常见方法是:
bytes
str
b'34'
'34'
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位的标题)
int
34
b'"'
chr
如果您使用的是Python 2(为什么?!?它已经停止使用将近一年),int.to_bytes不存在,但是您可以通过各种方式以中等效率伪造它,例如(仅处理非负值,而to_bytes使用简单的标志处理有符号值):
int.to_bytes
to_bytes
from binascii import unhexlify my_int_as_bytes = unhexlify('%x' % (my_int,))
你不能。或者更准确地说,您需要以某种方式将其转换为
bytes
或str
,但它不需要像b'34'
/'34'
那样是人类可读的文本形式。Python 3上的一种常见方法是:它使原始
int
(不考虑长度)的原始字节表示最少化;对于34
,您将得到b'"'
(因为它只需要一个字节来存储它,所以您基本上得到的是一个带有序号值的bytes
对象),但是对于较大的int
,它仍然有效(不像用chr
乱来乱来),并且它总是尽可能小(每个字节获得8位数据,而不是转换为文本字符串时每个字节超过3位的标题)如果您使用的是Python 2(为什么?!?它已经停止使用将近一年),
int.to_bytes
不存在,但是您可以通过各种方式以中等效率伪造它,例如(仅处理非负值,而to_bytes
使用简单的标志处理有符号值):相关问题 更多 >
编程相关推荐