2

受 XKCD geohashing 漫画 (http://imgs.xkcd.com/comics/geohashing.png) 的启发,我想我应该尝试用 Python 编写生成器。不过,我已经用它的主要部分打了一个块:转换为 MD5,然后转换为十进制。

有可能吗?

4

3 回答 3

5

编辑:看完漫画后,这里有一个更完整的XKCD geohashing解决方案:

>>> md5 = hashlib.md5('2005-05-26-10458.68').hexdigest()     # get MD5 as hex string
>>> float.fromhex('0.' + md5[:16])                           # first half as float
0.85771326770700229
>>> float.fromhex('0.' + md5[16:])                           # second half as float
0.54454306955928211

这是“转换为 MD5 然后转换为十进制”的更一般的答案:

假设您想要 string 的十进制 MD5 'hello world',您可以使用以下内容:

>>> int(hashlib.md5('hello world').hexdigest(), 16)
125893641179230474042701625388361764291L

hash.hexdigest()函数返回一个十六进制字符串,int(hex_str, 16)您可以将十六进制字符串转换为十进制

于 2012-06-19T18:35:07.397 回答
1

用于int('db931', 16)将十六进制(base-16)字符串db931转换为十进制。

于 2012-06-19T18:39:28.870 回答
1

这是一条线索 - 它对示例图像进行编码并生成您将在那里找到的数字。

>>> from hashlib import md5
>>> hash = md5("2005-05-26-10458.68").hexdigest()
>>> hash
'db9318c2259923d08b672cb305440f97'
>>> int(hash[:16],16)/16.**16
0.8577132677070023
>>> int(hash[16:],16)/16.**16
0.5445430695592821
>>> 
于 2012-06-19T18:43:23.177 回答