2017-01-04 4 views
0

私は任意のcharをバイナリ表現に変換したいのですが(私のcuurentコードのような文字列ではありません)、バイナリのシーケンスでなければなりません その後16ビットごとに私が行われ、その合計を計算した内容 私はnumpyのか、他のパッケージ を使用カントから、これは私が今得たものであり、それは文字列をバイナリのシーケンスに変換する

def checksum(st): 
    data = ' '.join(map(bin,bytearray(st))) 
    binar = [data[i:i+16] for i in range(0, len(data), 16)] 
    check = 0xffff 
    for hex in binar: 
     check += int(hex,2) 
    return check 

私の現在のコードは、例えば(文字列を取得します。 '10100/01 ')と私はそのための文字列の16ビットごとに合計したい私はバイナリ数に文字列を変換し、合計16ビットを合計する必要があります

+0

私は読みやすくするためにコードにスペースを追加しました。私の最初の編集は、私を食べてはいけません。とにかく、なぜ 'ord'ではなく' int'ですか?何か不足していますか? –

+0

ordは1つのcharを取得します。2つの文字(16ビット)の文字列をバイナリに変換したいのですが、ordは私を助けません..そして現在のコードは良くありません –

+0

私の問題はデータにバイナリ2番目の行では接頭辞 "0b10101"の0とbの文字をカウントするので、毎回16ビットに分割することさえできません –

答えて

0

これは私が正しく理解していれば、あなたの質問に答えます。あなたのコードの最初の2行は、あなたが達成したいことをしていないようですが、多分あなたは何か言及を忘れているかもしれません。

とにかく。

def checksum2(st): 
    dummy = 0xFFFF 
    for count in xrange(0,len(st),2): 
     dummy += ord(st[count])+ord(st[count+1])*256 
    return dummy 

このコードは、文字列の2番目の文字をすべてステップし、次のcharの値に1つのcharの値を加算して256を加算し、単語を作成します。実際に適切な16ビット値を作成したくない場合は、*256を削除し、代わりに2つの8ビット値を加算したい場合のみを削除してください。 little endianの代わりにbig endianが必要な場合は、*256をもう1つのord()に移動してください。

+0

ありがとうございます –

関連する問題