如何解码(非常大的值)十六进制字符串到十进制?

时间:2017-07-31 16:21:34

标签: python hex blockchain ethereum

我试图解码类似于以下格式的十六进制字符串:

0x00000000000000000000000000000000000000000000000bf97e2a21966df7fe

我能够使用online calculator对其进行解码。正确的解码数字应为220892037897060743166

但是,当我尝试使用python使用以下代码对其进行解码时,它会返回错误:

"0x00000000000000000000000000000000000000000000000bf97e2a21966df7fe".decode("hex")

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-32-1cf86ff46cbc> in <module>()
      9 key=keyarr[0]
     10 
---> 11 "0x00000000000000000000000000000000000000000000000bf97e2a21966df7fe".decode("hex")

/usr/local/Cellar/python/2.7.13_1/Frameworks/Python.framework/Versions/2.7/lib/python2.7/encodings/hex_codec.py in hex_decode(input, errors)
     40     """
     41     assert errors == 'strict'
---> 42     output = binascii.a2b_hex(input)
     43     return (output, len(input))
     44 

TypeError: Non-hexadecimal digit found

然后我删除了十六进制数字前面的0x并再次尝试:

"00000000000000000000000000000000000000000000000bf97e2a21966df7fe".decode("hex")

然后输出变为:

'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\xf9~*!\x96m\xf7\xfe'

我实际上并不理解输出......

如果您想知道这些数字来自哪里,它们来自Ethereum blockchain (ERC20) tokens

2 个答案:

答案 0 :(得分:6)

以16:

为基础调用int
int(your_string, base=16)

.decode('hex')表示您希望将字符串视为单个字符的十六进制编码序列。

答案 1 :(得分:0)

使用python 3.6.1

>>> a = '0x00000000000000000000000000000000000000000000000bf97e2a21966df7fe'
>>> a
'0x00000000000000000000000000000000000000000000000bf97e2a21966df7fe'
>>> int(a, 16)
220892037897060743166