【发布时间】:2021-05-25 11:43:11
【问题描述】:
我有以下 python 类:
class Header:
def __init__(self, id, len):
self.id = id
self.len = len
h = Header(1, 10)
如何序列化/编码此类的实例,h 到 bytes 或 bytearray,例如可以写入 socket?
为了提供更多的视角,我需要将此对象写入一个 C++ 程序正在侦听以接收上述对象的 unix 域套接字(它定义上述 struct 与上述完全相同,具有相同的数量/类型字段)。 pickle.dump(...) 编码不起作用。
C++ 结构是:
typedef struct Header {
uint32_t id;
uint32_t len;
}
事实上,我可以通过Go 与这个C++ 程序进行交互,如下所示。
import (
"bytes"
"encoding/binary"
)
type Header struct {
ID uint2
Len uint32
}
// output of this function is written to the socket opened by C++ and it works!!
func GetHeaderBuf() *bytes.Buffer, error{
hdrBuf := new(bytes.Buffer)
hdr := Header{1, 10}
if err := binary.Write(hdrBuf, binary.LittleEndian, hdr); err != nil {
return nil, err
}
return hdrBuf, nil
}
我正在寻找的是上面 Go 代码行 binary.Write(...) 的 python 等效项。
【问题讨论】:
-
套接字问题可能在这里得到解答:stackoverflow.com/a/28519877/2359945。我可以看到很难筛选结果,我不得不自己戳到大约 6 个左右。希望这对您有所帮助。将来,请考虑分享您研究过的一些链接以及它们如何达不到您的期望。
-
“它定义了上面的结构,与上面完全相同,具有相同数量/类型的字段”——什么结构和什么类型?您正在显示具有任意类型的任意字段的任意类。请注意,如果您有兴趣将 C 结构表示为“数据布局”,Python 有一个模块,字面意思是
struct。
标签: python c++ python-3.x go