假设我有一些二进制值:
0b100
并希望将其转换为base64
做base64.b64decode(0b100)
告诉我它期待一个字符串,而不是一个int ....现在,我不想使用字符串。
那么,有人能指出我将二进制数转换为base64数的正确方向吗?谢谢!
= d
答案 0 :(得分:6)
取决于您如何表示值0b100
>>> import struct
>>> val = 0b100
>>> print struct.pack('I', val).encode('base64')
BAAAAA==
这会将您的值转换为本机字节序的4字节整数,并将该值编码为base64。您需要指定数据的宽度,因为base64实际上是用于表示可打印字符中的二进制数据。
您通常可以通过struct的函数将数据编码为字符串,然后编码为base64。确保在解码时使用相同的数据布局和字节顺序。
答案 1 :(得分:1)
二进制文字只是普通的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'
答案 2 :(得分:0)
您的二进制值有多大?如果它可以适合单个字节,那么您可以使用chr
。
>>> base64.b64encode(chr(255))
'/w=='
否则我认为你必须通过一些指数数学来获取单个字节并将它们安排在big-endian或little-endian中,多次调用chr
。 (编辑:yan对struct
模块的回答更容易:)
另外,我应该注意二进制整数语法就是语法。解释器将其视为另一个整数。
>>> (0b0).__class__
<type 'int'>