2024-04-19 22:30:48 发布
网友
如何将任意字符串转换为唯一整数,这在Python会话和平台中是相同的?例如,hash('my string')不起作用,因为为每个Python会话和平台返回不同的值。
hash('my string')
使用诸如MD5或SHA1之类的哈希算法,然后通过int()转换hexdigest:
int()
hexdigest
>>> import hashlib >>> int(hashlib.md5('Hello, world!').hexdigest(), 16) 144653930895353261282233826065192032313L
这里是我的python27实现,用于这里列出的算法:http://www.cse.yorku.ca/~oz/hash.html。 不知道他们是否有效率。
from ctypes import c_ulong def ulong(i): return c_ulong(i).value # numpy would be better if available def djb2(L): """ h = 5381 for c in L: h = ((h << 5) + h) + ord(c) # h * 33 + c return h """ return reduce(lambda h,c: ord(c) + ((h << 5) + h), L, 5381) def djb2_l(L): return reduce(lambda h,c: ulong(ord(c) + ((h << 5) + h)), L, 5381) def sdbm(L): """ h = 0 for c in L: h = ord(c) + (h << 6) + (h << 16) - h return h """ return reduce(lambda h,c: ord(c) + (h << 6) + (h << 16) - h, L, 0) def sdbm_l(L): return reduce(lambda h,c: ulong(ord(c) + (h << 6) + (h << 16) - h), L, 0) def loselose(L): """ h = 0 for c in L: h += ord(c); return h """ return sum(ord(c) for c in L) def loselose_l(L): return reduce(lambda h,c: ulong(ord(c) + h), L, 0)
如果哈希函数真的不适合你,你可以把字符串变成一个数字。
my_string = 'my string' def string_to_int(s): ord3 = lambda x : '%.3d' % ord(x) return int(''.join(map(ord3, s))) In[10]: string_to_int(my_string) Out[11]: 109121032115116114105110103L
这是可逆的,通过chr映射每个三元组。
chr
def int_to_string(n) s = str(n) return ''.join([chr(int(s[i:i+3])) for i in range(0, len(s), 3)]) In[12]: int_to_string(109121032115116114105110103L) Out[13]: 'my string'
使用诸如MD5或SHA1之类的哈希算法,然后通过
int()
转换hexdigest
:这里是我的python27实现,用于这里列出的算法:http://www.cse.yorku.ca/~oz/hash.html。 不知道他们是否有效率。
如果哈希函数真的不适合你,你可以把字符串变成一个数字。
这是可逆的,通过
chr
映射每个三元组。相关问题 更多 >
编程相关推荐