XKCDジオハッシュコミック(http://imgs.xkcd.com/comics/geohashing.png)に触発されて、Pythonでジェネレーターをコーディングしてみようと思いました。しかし、私はその大部分でブロックにぶつかりました:MD5に変換してから10進数に変換します。
それは可能ですか?
XKCDジオハッシュコミック(http://imgs.xkcd.com/comics/geohashing.png)に触発されて、Pythonでジェネレーターをコーディングしてみようと思いました。しかし、私はその大部分でブロックにぶつかりました:MD5に変換してから10進数に変換します。
それは可能ですか?
編集:コミックを見た後、ここにXKCDジオハッシュのより完全なソリューションがあります:
>>> 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に変換してから10進数に変換する」のより一般的な答えは次のとおりです。
文字列の10進数のMD5が'hello world'
必要な場合は、次を使用できます。
>>> int(hashlib.md5('hello world').hexdigest(), 16)
125893641179230474042701625388361764291L
このhash.hexdigest()
関数は16進文字列を返し、16進文字列を10進に変換するint(hex_str, 16)
方法です。
int('db931', 16)
16進数(基数16)の文字列を10進数に変換するために使用しdb931
ます。
ここに手がかりがあります-これはサンプル画像をエンコードし、そこにある数字を生成します。
>>> 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
>>>