在base64中解码时,'/bfbKNk='给出以下5个字节:0xfd 0xb7 0xdb 0x28 0xd9。在Python中,您只需获取0xfdb7db28d9的数值,它实际上是十进制的1089711319257。在
但是,当高位位被设置时,BigInteger类以2的补码表示法将其处理为负数,例如0xfdb7db28d9-0x1000000000=-9800308519
另外,Python没有Java BigInteger的等价物来自动处理负值,所以要模拟Java处理,必须控制是否设置了高位,如果设置了,则手动取两者的补码值。在
Python 2代码可以是:coded_string = "/bfbKNk="
bytes_val = base64.decodestring(coded_string)
bval = "".join("{0:08b}".format(ord(c)) for c in bytes_val)
intval = int(bval, 2)
if ord(bytes_val[0]) & 0x70 != 0: # manually takes the two's complement
intval -= int('1' + '00' * len(bytes_val), 16)
print intval
实际上是打印出来的
^{pr2}$
如果您喜欢使用Python3,代码可以变成:
^{3}$