我在python中有一个类对象。我想通过TCP发送该对象值。
我知道如果它是C ++我可以像下面那样发送..
class Abc
{
int x;
float y;
string x;
};
Abc Obj;
char* data = new char[sizeof(Abc)];
memcpy(data, &obj, sizeof(Abc));
tcpsender.send(data); // may be incorrect syntax
因此,数据将作为字节发送到目的地。
现在我必须在Python中这样做。
这两行的替代部分是什么。
/*
char* data = new char[sizeof(Abc)];
memcpy(data, &obj, sizeof(Abc));
*/
答案 0 :(得分:2)
它不等同于C memcpy
,但如果您的要求是通过TCP发送对象并重建另一侧的pickle
模块,则适合您。
目标是将对象存储在顺序文件或字符串中并检索它们,包括跨不同的体系结构。
编辑:来自{3.4}的The Python Standard Library手册的示例:
对于最简单的代码,请使用dump()和load()函数。
import pickle
# An arbitrary collection of objects supported by pickle.
data = {
'a': [1, 2.0, 3, 4+6j],
'b': ("character string", b"byte string"),
'c': set([None, True, False])
}
with open('data.pickle', 'wb') as f:
# Pickle the 'data' dictionary using the highest protocol available.
pickle.dump(data, f, pickle.HIGHEST_PROTOCOL)
以下示例读取生成的pickled数据。
import pickle
with open('data.pickle', 'rb') as f:
# The protocol version used is detected automatically, so we do not
# have to specify it.
data = pickle.load(f)
答案 1 :(得分:1)
struct
包可以为您完成此操作。
import struct
fmt = 'if10p'
data = struct.pack(fmt, 42, 1.234, 'hello')
print struct.unpack(fmt, data)
您必须指定字符串的最大长度(此处为10)。您的C ++版本不起作用,因为字符串的原始字节将包含指针而不是sting中的字符。