两个星期以来,我一直在尝试和阅读以解决这个问题,但我尝试过的所有事情都没有起作用:-(
我正在使用python 2.7。
据我所知,我确实有一个格式为:AAMkADk0ZjU4ODc1LTY1MzAtNDdhZS04NGU5LTAwYjE2Mzg5NDA1ZABGAAAAAAAZS9Y2rt6uTJgnyUZSiNf0BwC6iam6EuExS4FgbbOF87exAAAAdGVuAAC6iam6EuExS4FgbbOF87exAAAxj5dhAAA=
我想将其转换为十六进制字符串。哪个应该导致00000000194BD636AEDEAE4C9827C9465288D7F40700BA89A9BA12E1314B81606DB385F3B7B100000074656E0000BA89A9BA12E1314B81606DB385F3B7B10000318F97610000
我尝试使用以下代码:
def itemid_to_entryid(itemid):
decoded_val = base64.b64decode(itemid)
decoded_val = ''.join( ["%02X" % ord(x) for x in decoded_val ] ).strip()
decoded_val = decoded_val.upper()
return decoded_val
itemid = 'AAMkADk0ZjU4ODc1LTY1MzAtNDdhZS04NGU5LTAwYjE2Mzg5NDA1ZABGAAAAAAAZS9Y2rt6uTJgnyUZSiNf0BwC6iam6EuExS4FgbbOF87exAAAAdGVuAAC6iam6EuExS4FgbbOF87exAAAxj5dhAAA='
entryid = itemid_to_entryid(itemid)
print(entryid)
总是返回以下内容:0003240039346635383837352D363533302D343761652D383465392D30306231363338393430356400460000000000194BD636AEDEAE4C9827C9465288D7F40700BA89A9BA12E1314B81606DB385F3B7B100000074656E0000BA89A9BA12E1314B81606DB385F3B7B10000318F97610000
我真的不知道,我做错了什么,真的很感激帮助我理解我做错了什么。
亲切的问候 本
答案 0 :(得分:4)
将base64转换为十六进制字符串的最佳方法是:
# Python 2
>>> base64.b64decode('woidjw==').encode('hex')
# Python 3
>>> base64.b64decode('woidjw==').hex()
'c2889d8f'
你也可以这样试试:
>>> base64.b64decode('woidjw==')
但我不是输出的粉丝:
'\xc2\x88\x9d\x8f'
就您的原始请求而言,您的初始数据肯定存在问题,因为它不会产生您期望的数据:
>>> base64.b64decode('AAMkADk0ZjU4ODc1LTY1MzAtNDdhZS04NGU5LTAwYjE2Mzg5NDA1ZABGAAAAAAAZS9Y2rt6uTJgnyUZSiNf0BwC6iam6EuExS4FgbbOF87exAAAAdGVuAAC6iam6EuExS4FgbbOF87exAAAxj5dhAAA=').encode('hex')
'0003240039346635383837352d363533302d343761652d383465392d30306231363338393430356400460000000000194bd636aedeae4c9827c9465288d7f40700ba89a9ba12e1314b81606db385f3b7b100000074656e0000ba89a9ba12e1314b81606db385f3b7b10000318f97610000'
答案 1 :(得分:0)
如果你从预期的输出十六进制中取出前几个字节并转换它们:
import base64
base64.b64encode('\x00\x00\x00\x00\x19\x4B\xD6')
你得到:
AAAAABlL1g==
与输入的开头不匹配。