2013-10-07 6 views
5

私は2つのマシン間でいくつかの変数の値を送る必要があり、ソケットを使ってそれを行うつもりです。私はデータが正しく送信されるように送信するデータのチェックサムとしてmd5ハッシュアルゴリズムを使用します。 md5ハッシュアルゴリズムを実行するには、データをバイトに変換する必要があります。私は、変数の名前とその値の両方を送信したい。私は多くの変数を持っているので、私は辞書を使います。辞書をバイトに変換して、もう一度pythonに戻しますか?

だから私はこれをバイトに変換したいのですか?言い換えれば

variables = {'var1' : 0, 'var2' : 'some string', 'var1' : ['listitem1','listitem2',5]} 

私は順番にそれらの中に複数の異なるデータ型を持っていると私はバイトにそれを変換したいリストを含むその内部に異なるデータ型の多くの辞書を持っています。受信側では、これらのバイトを辞書に戻します。

私はいくつかの異なる方法を試しましたが、ここではjsonをお勧めしますが(Convert a python dict to a string and back)、決してバイトを気にせずに文字列を生成することはできません。

+4

どのようにあなたの質問は、あなたがにリンクされているものとは異なるが与えるのだろうか?あなたは「いくつかの異なる方法」を試みたと言います。 1つに集中してください。あなたが試したことを教えてください、あなたのコードを表示し、あなたのためにうまくいかなかったことを教えてください。 –

+0

私が好きだったものは例を提供していません – user1205406

+0

bytestringはバイトです。 – Marcin

答えて

12

これは動作するはずです:あなたはバイナリに辞書を変換する必要がある場合

s=json.dumps(variables) 
variables2=json.loads(s) 
assert(variables==variables2) 
+5

'dumps'はオブジェクトをバイトではなく' str'にダンプします。 – VicX

7

を、あなたは、あなたがバイナリに変換することができ、前の回答で説明したように、文字列(JSON)に変換する必要があります。例えば

my_dict = {'key' : [1,2,3]} 

import json 
def dict_to_binary(the_dict): 
    str = json.dumps(the_dict) 
    binary = ' '.join(format(ord(letter), 'b') for letter in str) 
    return binary 


def binary_to_dict(the_binary): 
    jsn = ''.join(chr(int(x, 2)) for x in the_binary.split()) 
    d = json.loads(jsn) 
    return d 

bin = dict_to_binary(my_dict) 
print bin 

dct = binary_to_dict(bin) 
print dct 

が出力

1111011 100010 1101011 100010 111010 100000 1011011 110001 101100 100000 110010 101100 100000 110011 1011101 1111101 

{u'key': [1, 2, 3]} 
関連する問題