Python: 如何在二进制与Base64之间转换?
假设我有一个二进制值:
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。在解码的时候,要确保使用相同的数据布局和字节顺序。