Python:如何将二进制转换为Base64并再次转换回来?

10
假设我有一些二进制值:
0b100

我想将其转换为base64编码。

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

那么,有人可以指导我如何将二进制数字转换为base64数字吗?谢谢!

=D


1
你真的想要将数字转换为基数64吗,还是想要进行base-64编码?在任何语言中,将数字转换为基数64是一项微不足道的数学计算。 - Nick Bastin
1
只是想知道Python是否有一些超级易于使用的东西。 - NullVoxPopuli
3个回答

6

根据您如何表示值0b100

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

这将把您的值转换为本地字节序中的4字节整数,并将该值编码为base64。您需要指定数据宽度,因为base64通常用于表示可打印字符中的二进制数据。
通常可以通过struct函数将数据编码为一系列字节,然后再编码为base64字符串。在解码时,请确保使用相同的数据布局和字节序。

可能这并不是提问者想要的。 这将把二进制转换为十进制,然后将十进制表示编码为Base64。 如果您只想将数字转换为Base64,则有所区别。 - Thomas K
嗯?我正在对其进行二进制表示的base64编码,因为他要求这样做。(起初我因为误读了他的问题而回答错误,但现在已经修正过来了) - yan
从base64还原?使用encoded_string.decode('base64'),然后使用struct的unpack解析该字符串。 - yan

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'

嗯,这在Python3中不再起作用了:LookupError: 'base64'不是文本编码;使用codecs.encode()处理任意编解码器。 - gebbissimo

0

你的二进制值有多大?如果它可以适合一个字节,那么你可以使用chr

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

否则,我认为你将不得不使用一些指数运算来获取它的各个字节,并按大端或小端排列它们,多次调用chr。 (编辑:yan的答案使用struct模块更容易 :))
另外,我应该指出二进制整数语法只是语法。解释器将其视为另一个整数。
>>> (0b0).__class__
<type 'int'>

它可以从8位到512位不等。 =\ - NullVoxPopuli

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接