我目前正在启动python,并正在编写一个程序,该程序将转换一个给定的长十六进制数字符串,该字符串应成对分隔。我很难使用蟒蛇的编码功能。
到目前为止,我已经:
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部分的编码/解码有什么问题。
您的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))