我目前正在开始python,并编写一个程序,它将转换给定的长十六进制数字串,应该分成对。我很难利用pythons编码功能。
到目前为止,我有:
import base64
def splitByTwo(str):
return [i+j for i,j in zip(list(str)[::2], list(str)[1::2])]
def bytesToBase64(str):
b64List = []
stringsByTwo = splitByTwo(str.upper())
for x in stringsByTwo:
b64List.insert(stringsByTwo.index(x), base64.b16decode(x))
return b64List
print(bytesToBase64("49276d206b696c6c696e6720796f757220627261696e206c696b65206120706f69736f6e6f7573206d757368726f6f6d"))
我可以打印[b'I', b"'", b'm', b'm', b'm', b' ', b' ',.....]
,但我不确定我对bytesToBase64()
方法的base64部分的编码/解码有什么问题。
答案 0 :(得分:2)
您的bytesToBase64
函数返回给定十六进制字符串表示的字节列表(由于您使用了insert
而不是append
而略微乱码)。你还没有完成base64编码部分。
修复现有功能:
def bytesToBase64(str):
b64List = []
stringsByTwo = splitByTwo(str.upper())
for x in stringsByTwo:
b64List.append(base64.b16decode(x))
print base64.b64encode("".join(b64List))
但这个功能不是很惯用。要完全重写它:
def bytesToBase64(s):
return base64.b64encode(binascii.unhexlify(s))