2016-03-30 4 views
0

Ich beginne gerade Python und schreibe ein Programm, das eine gegebene lange Folge von Hex-Zahlen konvertiert, die in Paare getrennt werden sollten. Mir fällt es schwer, die Python-Kodierungsfunktion zu nutzen.Codierungsfehler beim Konvertieren von Hex in Base64 Python

Bisher habe ich:

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")) 

ich es [b'I', b"'", b'm', b'm', b'm', b' ', b' ',.....] drucken bekommen kann, aber ich bin nicht sicher, was mit meinem Encoder/Decoder zu base64 Abschnitt der bytesToBase64() Methode falsch ist.

Antwort

2

Ihre bytesToBase64-Funktion gibt eine Liste der Bytes zurück, die durch die angegebene hexadezimale Zeichenfolge dargestellt werden (etwas verzerrt, weil Sie insert anstelle von append verwendet haben). Sie haben den base64-Codierungsteil nicht ausgeführt.

Ihre bestehende Funktion zu beheben:

def bytesToBase64(str): 
    b64List = [] 
    stringsByTwo = splitByTwo(str.upper()) 
    for x in stringsByTwo: 
     b64List.append(base64.b16decode(x)) 
    print base64.b64encode("".join(b64List)) 

Aber diese Funktion ist nicht sehr idiomatisch. Um es komplett neu zu schreiben:

def bytesToBase64(s): 
    return base64.b64encode(binascii.unhexlify(s)) 
+0

Vielen Dank für die Lösung. Mir fiel es schwer, die Funktionalität des base64-Teils zu verstehen, so wie es verwendet wird und was es als Argumente verwendet. Die Dokumentation war ein wenig schwer zu verstehen, aber jetzt verstehe ich es. – Jeremy