如果我有二进制字符串,请说str = "010100011010101001001101100101100110101"
这是由其他字符串的base64版本编码的,我该如何解码这个字符串?
答案 0 :(得分:5)
如果你的示例字符串实际上是有意义的而不是构成的东西会让这个问题变得不清楚,那会很棒,但我会尽力在这里找出你可能以最详细的方式表达的意思。
假设您的实际输入是str
,如下所示:
s = '101100101010011010000100011000001011010010110000100111000110000'
您可以使用int
关键字参数将其转换为base
来获取十六进制格式
>>> i = int(s, base=2) # 6436561067884170800
然后通过格式化将其转回字符串:
>>> h = '%x' % i # '595342305a584e30'
然后使用十六进制字符串上的binascii.a2b_hex
函数来获取原始字节:
>>> b64 = binascii.a2b_hex(h) # b'YSB0ZXN0'
如果它是一些有效的基本64位编码字节流,那么您可以在其上使用base64.b64decode
来获取实际字节
>>> r = base64.b64decode(b64) # b'a test'
要将其转换为字符串,请对其应用正确的编解码器(即使用bytes.encode
)。
最后,如果你想知道我是如何生成那个输入的,那就是上面所有的,反过来就是一个单行函数:
>>> '{0:b}'.format(int(binascii.b2a_hex(base64.b64encode(b'a test')), base=16))
'101100101010011010000100011000001011010010110000100111000110000'