【问题标题】:Python 2.7 - convert base 64 to binary stringPython 2.7 - 将 base 64 转换为二进制字符串
【发布时间】:2018-01-08 14:32:16
【问题描述】:

我使用的是 Python 2.7(这意味着没有 base64.decodebytes()) 我需要将我的 base64 字符串,例如 aW0ganVzdCBhIGJhc2UgNjQgZmlsZQ== 转换为二进制(即 1 和 0 的字符串)。

我想尝试以wb 模式将 base 64 字符串写入文件,然后使用rb 将其读回,但即使使用wb 写入 - 打开时我仍然看到原始 base 64 字符串文件..

我错过了什么?

谢谢

【问题讨论】:

  • 你试过 binascii 库吗?
  • 你做错了,但你没有向我们展示你用来将二进制文件写入文件的代码或读回文件的代码。解码 base64 字符串会产生一些字节,其值在 0-255 范围内,而不是直接由 1 和 0 组成的字符串。
  • 很好的示例字符串,顺便说一句。

标签: python python-2.7 base64


【解决方案1】:

您可以使用列表推导中的ordformat 函数进行转换。

import base64
data = 'aW0ganVzdCBhIGJhc2UgNjQgZmlsZQ=='
print [format(ord(c), '08b') for c in base64.b64decode(data)]

输出

['01101001', '01101101', '00100000', '01101010', '01110101', '01110011', '01110100', '00100000', '01100001', '00100000', '01100010', '01100001', '01110011', '01100101', '00100000', '00110110', '00110100', '00100000', '01100110', '01101001', '01101100', '01100101']

如果您想将其作为单个字符串,只需 .join 它:

''.join([format(ord(c), '08b') for c in base64.b64decode(data)])

【讨论】:

  • 添加content length checker 否则base64.b64decode 将不起作用!
  • @dsgdfg 公平点。我们可以进行长度检查,但如果我们期望数据在大多数情况下都是有效的,那么将代码包装在 try: ... except TypeError: 中会更有效。
【解决方案2】:

没错。即使您将它们保存到二进制文件中,您也可以看到可读的字符。 因为它们是 ASCII 字符。

其实你不会用二进制格式保存文件,因为用'wb'保存是不能得到二进制字符串的。

你应该做的是获取每个字符的ASCII值,并将其转换为二进制数。

【讨论】:

    猜你喜欢
    • 2015-08-09
    • 1970-01-01
    • 2021-07-17
    • 2018-01-22
    • 2012-02-14
    • 1970-01-01
    • 2021-09-30
    • 1970-01-01
    相关资源
    最近更新 更多