2013-10-07 56 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]} 
相关问题