2016-03-30 16 views
0

現在、Pythonを開始しており、指定された16進数の長い文字列を変換するプログラムを作成しています。私は機能をコード化しているpythonsを利用するのに苦労しています。16進数をBase64 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セクションに私のエンコード/デコードに問題があるのか​​わからないです。

答えて

2

bytesToBase64関数は、指定された16進文字列で表されるバイトのリストを返します(appendの代わりにinsertを使用したため、文字化けしました)。あなたは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)) 
+0

ありがとうございました。私はbase64パーツの機能を理解するのに苦労していました。ドキュメントは理解するのが少し難しかったが、今はそれを手に入れる。 – Jeremy

関連する問題