我正在尝试从原始二进制文件中解码base64:
作为输入,我有4个6位值
010000 001010 000000 011001
我转换为十进制,给出
16 10 0 25
最后使用base 64表解码,给出
Q K A Z
这被证实是正确的结果。
我想使用Python的base64模块自动执行此操作,但使用
import base64
base64.b64decode( bytearray([16,10,0,25]) )
返回一个空字符串。
在给定输入下使用此库的正确方法是什么?
答案 0 :(得分:1)
[16, 10, 0, 25]
不是base64字符串,真的;我不认为base64
具有将base64字母表的数字表示转换为字母表示的任何功能。不过,推出自己的东西并不难:
def to_characters(numeric_arr):
target = b'ABCDEFGHIJKLMNOPQRSTUVWXYZ' + b'abcdefghijklmnopqrstuvwxyz' + b'0123456789' + b'+/'
return bytes(target[n] for n in numeric_arr)
然后:
>>> to_characters(bytearray([16, 10, 0, 25]))
b'QKAZ'
>>> to_characters([16, 10, 0, 25]) # <- or just this
b'QKAZ'
您现在可以将此bytes对象传递给base64.b64decode
:
>>> base64.b64decode(b'QKAZ')
b'@\xa0\x19'
(请注意,您在使用bytearray
的示例中遇到了语法问题 - 请勿执行bytearray[...]
;执行bytearray([...])
.Python不使用C-比如int array[size]
语法。)