我有一个关于转换base64编码字符串到二进制的问题。我在下面的链接中收集Fingerprint 2D,
url = "https://pubchem.ncbi.nlm.nih.gov/rest/pug/compound/cid/108770/property/Fingerprint2D/xml"
Fingerprint2D=AAADccB6OAAAAAAAAAAAAAAAAAAAAAAAAAA8WIEAAAAAAACxAAAAHgAACAAADAzBmAQwzoMABgCI AiTSSACCCAAhIAAAiAEMTMgMJibMsZuGeijn4BnI+YeQ0OMOKAACAgAKAABQAAQEABQAAAAAAAAA AA==
Pubchem中的descriptiong说这是115字节的字符串,转换成二进制时应该是920位,我试着用下面的方法将其转换成二进制,
response = requests.get(url)
tree = ET.fromstring(response.text)
for el in tree[0]:
if "Fingerprint2D" in el.tag:
fpp = bin(int(el.text, 16))
print(len(fpp))
如果我使用上面的代码,我会得到以下错误,“值错误:base 16的int()的文字无效:
如果我使用下面的代码,fpp(二进制)的长度等于1278,这不是我所期望的。
response = requests.get(url)
tree = ET.fromstring(response.text)
for el in tree[0]:
if "Fingerprint2D" in el.tag:
fpp = bin(int(hexlify(el.text), 16))
print(len(fpp))
非常感谢!
2条答案
按热度按时间hm2xizp91#
要解码base64格式,需要将
bytes
对象传递给base64.decodebytes
函数:我得到以下结果:
所以920位符合预期。
要获取二进制数据,只需迭代字节并使用
format
和零填充到8位数(bin
添加了0b
头部,因此它不适合)转换为二进制数据,然后将字符串一起join
:结果:
(如预期的那样,为920个字符)
r8uurelv2#
使用Python 3执行此操作的最简单方法是: