通过网络发送pythonc_types结构
sending python c_types structure through network
我有一个声明为 c_types
的结构
class MyMessage(Structure):
__fields__ = [ ("name",c_char * 32), ("id", c_int) ]
我想使用以下伪代码通过 UDP 将此数据发送到我的 C++ 客户端
myMessage = MyMessage()
socket.sendto( *myMessage*, host, port)
在我的 C++ 中,我通常在每个字段上调用 hton,然后将结构写入 char 缓冲区。我如何在 python 中执行此操作?我看到人们使用 struct.pack,这是正确的方法吗?使用 struct.pack 格式化时是否应该处理 hton?
是的,你应该使用 struct.pack
。您可以在编写包格式字符串时指定字节顺序。要将其格式化为 hton
,您可以使用 >
符号。请参阅 byte order and alignment
上的结构文档
>>> import struct
>>> struct.pack(">L", 1) # big endian
'\x00\x00\x00\x01'
>>> struct.pack("L", 1)
'\x01\x00\x00\x00'
我有一个声明为 c_types
的结构 class MyMessage(Structure):
__fields__ = [ ("name",c_char * 32), ("id", c_int) ]
我想使用以下伪代码通过 UDP 将此数据发送到我的 C++ 客户端
myMessage = MyMessage()
socket.sendto( *myMessage*, host, port)
在我的 C++ 中,我通常在每个字段上调用 hton,然后将结构写入 char 缓冲区。我如何在 python 中执行此操作?我看到人们使用 struct.pack,这是正确的方法吗?使用 struct.pack 格式化时是否应该处理 hton?
是的,你应该使用 struct.pack
。您可以在编写包格式字符串时指定字节顺序。要将其格式化为 hton
,您可以使用 >
符号。请参阅 byte order and alignment
>>> import struct
>>> struct.pack(">L", 1) # big endian
'\x00\x00\x00\x01'
>>> struct.pack("L", 1)
'\x01\x00\x00\x00'