Python: 如何在二进制与Base64之间转换?

10 投票
3 回答
33374 浏览
提问于 2025-04-16 13:41

假设我有一个二进制值:

0b100

我想把它转换成base64格式。

当我用 base64.b64decode(0b100) 的时候,它告诉我这个函数需要一个字符串,而不是一个整数……但是我不想处理字符串。

所以,有没有人能告诉我怎么把二进制数字转换成base64数字呢?谢谢!

=D

3 个回答

0

你的二进制值有多大呢?如果它可以放进一个字节里,那你可以用 chr 来处理。

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

如果不行的话,你可能需要用一些指数运算把每个字节分开,然后按照大端或小端的方式排列,再多次调用 chr。 (补充:yan 的回答提到的 struct 模块更简单 :)

另外,我还想说,二进制整数的语法就是语法而已。解释器把它看作是另一个整数。

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

二进制字面量其实就是普通的Python整数。

>>> 0b100
<<< 4

>>> 4
<<< 4

只需要把它转换成字符串,然后进行base64编码(这样你就得到了一个表示'4'的base64字符串)。这个方法没有问题,既简单又不会丢失信息。

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

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

如果你想的话,可以用bin函数把整数转换成二进制字符串:

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

根据你如何表示值 0b100

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

这段代码会把你的值转换成一个4字节的整数,按照本地的字节顺序来处理,然后把这个值编码成base64格式。你需要指定数据的宽度,因为base64实际上是为了把二进制数据转换成可打印的字符。

通常,你可以通过结构体的函数将数据编码成字节字符串,然后再转换成base64。在解码的时候,要确保使用相同的数据布局和字节顺序。

撰写回答