Python从base64转换为二进制 [英] Python converting from base64 to binary
问题描述
我有一个关于将base64编码的字符串转换为二进制的问题.我正在以下链接中收集Fingerprint2D,
I have a problem about converting a base64 encoded string into binary. I am collecting the Fingerprint2D in the following link,
url = "https://pubchem.ncbi.nlm.nih.gov/rest/pug/compound/cid/108770/property/Fingerprint2D/xml"
Fingerprint2D=AAADccB6OAAAAAAAAAAAAAAAAAAAAAAAAAA8WIEAAAAAAACxAAAAHgAACAAADAzBmAQwzoMABgCI AiTSSACCCAAhIAAAiAEMTMgMJibMsZuGeijn4BnI+YeQ0OMOKAACAgAKAABQAAQEABQAAAAAAAAA AA==
Pubchem中的说明g说这是115字节的字符串,转换为二进制时应为920位.我尝试使用以下命令将其转换为二进制文件,
The descriptiong in the Pubchem says that this is 115 byte string, and it should be 920 bits when converted into binary. I try to convert it to the binary with the following,
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))
如果我使用上面的代码,则会收到以下错误,值错误:base16的int()的无效文字:
If I use the code above, I'm getting the following error, "Value error: invalid literal for int() with base16:
如果我使用下面的代码,则fpp(二进制)的长度等于1278,这不是我期望的.
And if I use the code below, length of fpp (binary) is equal to 1278 which is not what I expected.
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))
非常感谢!
推荐答案
要解码base64格式,您需要将bytes
对象传递给base64.decodebytes
函数:
To decode base64 format you need to pass a bytes
object to the base64.decodebytes
function:
import base64
t = "AAADccB6OAAAAAAAAAAAAAAAAAAAAAAAAAA8WIEAAAAAAACxAAAAHgAACAAADAzBmAQwzoMABgCI AiTSSACCCAAhIAAAiAEMTMgMJibMsZuGeijn4BnI+YeQ0OMOKAACAgAKAABQAAQEABQAAAAAAAAA AA==".encode("ascii")
decoded = base64.decodebytes(t)
print(decoded)
print(len(decoded)*8)
我得到以下信息:
b'\x00\x00\x03q\xc0z8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00<X\x81\x00\x00\x00\x00\x00\x00\xb1\x00\x00\x00\x1e\x00\x00\x08\x00\x00\x0c\x0c\xc1\x98\x040\xce\x83\x00\x06\x00\x88\x02$\xd2H\x00\x82\x08\x00! \x00\x00\x88\x01\x0cL\xc8\x0c&&\xcc\xb1\x9b\x86z(\xe7\xe0\x19\xc8\xf9\x87\x90\xd0\xe3\x0e(\x00\x02\x02\x00\n\x00\x00P\x00\x04\x04\x00\x14\x00\x00\x00\x00\x00\x00\x00\x00'
920
那么920位就可以了.
So 920 bits as expected.
要以二进制形式获取数据,只需对字节进行迭代,然后使用format
并将其填充为8位零填充(bin
添加0b
标头,因此不合适)和join
字符串,即可转换为二进制一起:
To get data as binary just iterate on the bytes and convert to binary using format
and zero-padding to 8 digits (bin
adds a 0b
header so it's not suitable), and join
the strings together:
print("".join(["{:08b}".format(x) for x in decoded]))
导致:
00000000000000000000001101110001110000000111101000111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011110001011000100000010000000000000000000000000000000000000000000000001011000100000000000000000000000000011110000000000000000000001000000000000000000000001100000011001100000110011000000001000011000011001110100000110000000000000110000000001000100000000010001001001101001001001000000000001000001000001000000000000010000100100000000000000000000010001000000000010000110001001100110010000000110000100110001001101100110010110001100110111000011001111010001010001110011111100000000110011100100011111001100001111001000011010000111000110000111000101000000000000000001000000010000000000000101000000000000000000101000000000000000001000000010000000000000101000000000000000000000000000000000000000000000000000000000000000000
(预期为920个字符)
(which is 920 chars, as expected)
这篇关于Python从base64转换为二进制的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!