【问题标题】:Python: How do I convert from binary to base 64 and back?Python:如何从二进制转换为 base 64 并返回?
【发布时间】:2011-03-15 07:20:35
【问题描述】:

假设我有一些二进制值:

0b100

并希望将其转换为 base64

base64.b64decode(0b100) 告诉我它需要一个字符串,而不是一个 int....现在,我不想使用字符串。

那么,谁能指出我将二进制数转换为 base64 数的正确方向?谢谢!

=D

【问题讨论】:

  • 您真的要转换为 radix-64 数字 还是 base-64 编码?转换为 radix-64 数字是一项简单的数学计算(在任何语言中)。
  • 只是想知道python是否有一些超级好用的东西。

标签: python binary base64


【解决方案1】:

取决于你如何表示值0b100

>>> import struct
>>> val = 0b100
>>> print struct.pack('I', val).encode('base64')
BAAAAA==

这会将您的值转换为原生字节序的 4 字节整数,并将该值编码为 base64。您需要指定数据的宽度,因为 base64 确实用于以可打印字符表示二进制数据。

您通常可以通过 struct 的函数将数据编码为一串字节,然后编码为 base64。确保在解码时使用相同的数据布局和字节序。

【讨论】:

  • 这可能不是提问者所追求的。这会将二进制转换为十进制,然后以 64 为基数对十进制表示进行编码。如果只是想将数字转换为base 64,那就有点不同了。
  • 嗯?正如他所问,我正在对它的二进制表示进行 base64 编码。 (我最初通过误读他的问题而回答错误,但后来修复了它)
  • 从base64返回?使用encoded_string.decode('base64'),然后使用结构的unpack 雕刻该字符串。
【解决方案2】:

二进制字面量只是普通的 Python 整数。

>>> 0b100
<<< 4

>>> 4
<<< 4

只需转换为字符串并对其进行 base64 编码(为您提供一个字符串,它是 '4' 的 base64 表示)。这种方法没有任何问题,它无损且简单。

>>> s = str(0b100).encode('base64')

>>> int(s.decode('base64'))
<<< 4

如果需要,可以使用 bin 将 int 转换为二进制字符串:

>>> bin(int(s.decode('base64')))
<<< '0b100'

【讨论】:

    【解决方案3】:

    你的二进制值有多大?如果它可以容纳在单个字节中,那么您可以使用chr

    >>> base64.b64encode(chr(255))
    '/w=='
    

    否则,我认为您必须通过一些指数数学从中取出单个字节,并将它们排列成大端或小端,多次调用chr。 (编辑:yan 对struct 模块的回答更简单:)

    另外,我应该注意到二进制整数语法就是这样的语法。解释器将其视为另一个整数。

    >>> (0b0).__class__
    <type 'int'>
    

    【讨论】:

    • 嗯,它可以是 8 位到 512 位之间的任何位置。 =\
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-15
    • 2015-12-09
    • 2017-10-20
    • 1970-01-01
    • 2014-11-09
    • 2017-02-05
    • 2019-02-02
    相关资源
    最近更新 更多