Python:使用base64解码bin

Python:使用base64解码bin,python,python-2.7,encoding,base64,Python,Python 2.7,Encoding,Base64,如果我有一个二进制字符串,比如说str=“0101000110101010010011010100101100110101”,它是由其他字符串的base64版本编码的,我如何解码这个字符串?如果你的示例字符串实际上是有意义的,而不是虚构的,这会让这个问题变得很不清楚,但我会尽我最大的努力,以尽可能详细的方式弄明白你的意思 假设您的实际输入是如下所示的str: s = '101100101010011010000100011000001011010010110000100111000110000'

如果我有一个二进制字符串,比如说
str=“0101000110101010010011010100101100110101”
,它是由其他字符串的base64版本编码的,我如何解码这个字符串?

如果你的示例字符串实际上是有意义的,而不是虚构的,这会让这个问题变得很不清楚,但我会尽我最大的努力,以尽可能详细的方式弄明白你的意思

假设您的实际输入是如下所示的
str

s = '101100101010011010000100011000001011010010110000100111000110000'
您可以通过使用
base
关键字参数将其强制转换为
int
来获得十六进制形式

>>> i = int(s, base=2)  # 6436561067884170800
然后通过如下格式将其转换回字符串:

>>> h = '%x' % i  # '595342305a584e30'
然后使用十六进制字符串上的函数获取原始字节:

>>> b64 = binascii.a2b_hex(h)  # b'YSB0ZXN0'
如果它是一些有效的base64编码字节流,那么您可以使用它来获取实际字节

>>> r = base64.b64decode(b64)  # b'a test'
要将其转换为字符串,请对其应用正确的编解码器(即使用
bytes.encode

最后,如果您想知道我是如何生成该输入的,请参阅上面的内容,并将其转换为一个单行函数:

>>> '{0:b}'.format(int(binascii.b2a_hex(base64.b64encode(b'a test')), base=16))
'101100101010011010000100011000001011010010110000100111000110000'

如果您的示例字符串实际上是一些有意义的东西,而不是一些虚构的东西,这会使这个问题变得很不清楚,那就太好了,但是我将在这里尽我所能以尽可能详细的方式弄清楚您的意思

假设您的实际输入是如下所示的
str

s = '101100101010011010000100011000001011010010110000100111000110000'
您可以通过使用
base
关键字参数将其强制转换为
int
来获得十六进制形式

>>> i = int(s, base=2)  # 6436561067884170800
然后通过如下格式将其转换回字符串:

>>> h = '%x' % i  # '595342305a584e30'
然后使用十六进制字符串上的函数获取原始字节:

>>> b64 = binascii.a2b_hex(h)  # b'YSB0ZXN0'
如果它是一些有效的base64编码字节流,那么您可以使用它来获取实际字节

>>> r = base64.b64decode(b64)  # b'a test'
要将其转换为字符串,请对其应用正确的编解码器(即使用
bytes.encode

最后,如果您想知道我是如何生成该输入的,请参阅上面的内容,并将其转换为一个单行函数:

>>> '{0:b}'.format(int(binascii.b2a_hex(base64.b64encode(b'a test')), base=16))
'101100101010011010000100011000001011010010110000100111000110000'

将其转换为ASCII并使用python中的base64模块libIt不清楚您的意思;你最初是怎么找到那根绳子的?它肯定不是以64为基数的,要从二进制中解码它,您需要知道每个字符的位长度以及它们的映射方式(如上面建议的ASCII序号)。它有39个字符长,这向我建议您应该从一次获取三个字符开始。@ssphinx
TypeError:填充不正确
;可能(我真的不这么认为…)binascii.b2a\u base64(str)(str是一个坏的变量名…)@jornsharpe是的,我知道,但问题不清楚<代码>strb64=base64.b64编码(str);b64解码(strb64)将其转换为ASCII并使用python libIt中的base64模块不清楚您的意思;你最初是怎么找到那根绳子的?它肯定不是以64为基数的,要从二进制中解码它,您需要知道每个字符的位长度以及它们的映射方式(如上面建议的ASCII序号)。它有39个字符长,这向我建议您应该从一次获取三个字符开始。@ssphinx
TypeError:填充不正确
;可能(我真的不这么认为…)binascii.b2a\u base64(str)(str是一个坏的变量名…)@jornsharpe是的,我知道,但问题不清楚<代码>strb64=base64.b64编码(str);base64.b64decode(strb64)哦,我以为那实际上是他上面的二进制文件。。。我现在明白了。。。也许你的权利我会离开我的+1 snce你走得太远了我不知道,我通常讨厌处理与描述不匹配的输入,所以我忽略了这些,并构建了一个新的示例输入,它实际上与tin上所说的内容匹配。哦,我以为那实际上是他上面的二进制。。。我现在明白了。。。也许你是对的,我会留下我的+1输入,因为你走得太远了,我不知道,我通常讨厌处理与描述不匹配的输入,所以我忽略了这些,并构建了一个新的示例输入,它实际上与tin上所说的匹配。