pythonは、任意のファイルを1010のような文字列に変換し、元に戻します.暗号解読が面白いと思いました.

2835 ワード

ここで聞いたのが起源です.http://segmentfault.com/q/1010000000182052
最近はpython challingに夢中になりました.これを全部やろうと思ったら、簡単に作るのは難しいと思います.でも、いいところははっきり整理しました.あいまいなところがたくさんあります.
無駄話は言わないで、先にコードを付けます.
# path  :         

def convertFileToOneAndZero(path):

    f = open(path,'rb')

    src = f.read()

    print len(src)



    result = []

    for i in src:

        temp = bin(ord(i))[2:] # bin()          0b    ,          

        temp = '0' * (8-len(temp)) + temp

        result.append(temp)



    return ''.join(result)



# src  :1010   

# path  :       

def convertOneAndZeroToFile(src, path):

    result = []

    for i in range(0, len(src), 8):

        result.append(chr(int(src[i:i+8], 2)))



    f = open(path, 'wb')

    f.write(''.join(result))

    f.close()
バイナリ形式でファイルを開けたら、read()から出てくる文字列はbinary stringといいます.バイナリ文字列とは、この文字列のバイナリレベルとファイルが全く同じで、他のバイナリファイルに書き込むとコピーしたものと同じです.表現形式のバイナリではなく(101010101).
そしてこの文字列の各文字をord()で数字に変換し、バイナリ表現の文字列に変換すればいいです.注意したいのは、pythonのbin関数は自分で8桁を補えません.
なぜ8人を補充しないと気をつけないといけないですか?一つの文字が8 bitなので、前のビットは0でも無視できません.補完しないと生成された文字列は違います.変換したらファイルが間違ってしまいます.変換された1010の長さはbinary stringの長さの8倍であるべきです.
 
気になります.binary string(バイナリ文字列)とは、その代表的なファイルとバイナリレベルで内容が同じ文字列を指します.1010という文字列はどう呼ばれますか?stackoverflowでは多くの問題が1 s and 0 sで表されているようです.もっと文芸的で清新な表現がありますか?