2013-10-07 12 views
5

Ich muss den Wert einiger Variablen zwischen zwei Maschinen senden und beabsichtige, es mit Sockets zu tun. Ich benutze den md5-Hash-Algorithmus als Prüfsumme für die Daten, die ich sende, um sicherzustellen, dass die Daten korrekt übertragen werden. Um den MD5-Hash-Algorithmus auszuführen, muss ich die Daten in Bytes konvertieren. Ich möchte sowohl den Namen der Variablen als auch ihren Wert übertragen. Da ich viele Variablen habe, benutze ich ein Wörterbuch.Wörterbuch in Bytes und wieder Python konvertieren?

Also ich möchte etwas wie diese in Bytes konvertieren?

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

Mit anderen Worten habe ich ein Wörterbuch mit vielen verschiedenen Datentypen im Inneren einschließlich Listen, die wiederum mehrere unterschiedliche Datentypen in ihnen haben, und ich möchte, dass in Bytes konvertieren. Dann wandeln Sie diese Bytes auf der empfangenden Maschine in ein Wörterbuch zurück.

Ich habe ein paar verschiedene Methoden ausprobiert json ist hier empfohlen (Convert a python dict to a string and back), aber ich kann nicht Naht, um eine Zeichenfolge mit ihm egal Bytes zu produzieren.

+4

Wie ist Ihre Frage unterscheidet sich von dem Sie verknüpft? Sie sagen, Sie haben "ein paar verschiedene Methoden" ausprobiert. Konzentriere dich auf eins. Sagen Sie uns, was Sie versucht haben, zeigen Sie uns Ihren Code und sagen Sie uns, was nicht für Sie funktioniert hat. –

+0

der, den ich mochte, lieferte kein Beispiel – user1205406

+0

Ein bytestring ist Bytes. – Marcin

Antwort

12

Dies sollte funktionieren:

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

'Dumps' Dump das Objekt auf 'str' nicht Bytes – VicX

7

Wenn Sie das Wörterbuch binär konvertieren müssen, müssen Sie es in einen String (JSON), wie in der vorherigen Antwort beschrieben konvertieren, dann können Sie es in binäre konvertieren .

Zum Beispiel:

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 

geben die Ausgabe

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

{u'key': [1, 2, 3]} 
Verwandte Themen