2013-10-07 58 views
5

我需要在兩臺機器之間發送一些變量的值,並打算使用套接字來完成它。我使用md5散列算法作爲我發送的數據的校驗和,以確保數據正確傳輸。要執行md5散列算法,我必須將數據轉換爲字節。我想傳輸變量的名稱和它的值。由於我有很多變量我使用字典。將字典轉換爲字節並再次返回python?

所以我想這樣的東西轉換爲字節?

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

換句話說,我有它裏面有很多不同的數據類型,包括列出這反過來又對他們有多種不同的數據類型,我想將其轉換爲字節的字典。然後在接收機器上將這些字節轉換回字典。

我已經嘗試了幾種不同的方法json在這裏推薦(Convert a python dict to a string and back),但我不能縫製產生一個字符串與它無關的字節。

+4

如何是你的問題,你從鏈接到一個不同?你說你已經嘗試了「幾種不同的方法」。專注於一個。告訴我們您試過的是什麼,向我們展示您的代碼,並告訴我們什麼不適合您。 –

+0

我喜歡的一個沒有提供的例子 – user1205406

+0

字節串是字節。 – 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]} 
相關問題