[英]How create struct c with python and send on socket
這個結構是C代碼:
struct my_struct_in_c
{
int port1;
int port2;
int port3;
char ip1[20];
char ip2[20];
};
如何將上述結構 c 轉換為 python?
我已經測試了這些代碼,但沒有更正 c 中的反序列化器:
code1(不糾正 c 中的反序列化器):
res = pack("iii%ss%ss" % (20, 20), 2001, 2002, 2003, b"192.168.1.1", b"192.168.1.2")
code2(不糾正 c 中的反序列化器):
import struct
from collections import namedtuple
format_ = "iii%ss%ss" % (20, 20)
MyStruct = namedtuple("my_struct_in_c", "port1 port2 port3 ip1 ip2")
tuple_to_send = MyStruct(port1=2000,
port2=2001,
port3=2002,
ip1=b"192.168.1.1",
ip2=b"192.168.1.2")
string_to_send = struct.pack(format_, *tuple_to_send._asdict().values())
只要您想通過套接字發送數據,就會遇到序列化/反序列化問題。 Python struct
模塊完全處理它,您可以(或必須)指定不同元素的大小和字節順序(字節序)。
C 方面,初學者通常只是將本機結構轉換為 char 數組並直接在其上使用讀取或寫入......具有未指定的字節順序和可能的填充問題。
我的意思是,您永遠不應該依賴 C內部存儲結構的方式,而是始終以明確定義(大小和字節順序)的方式(反)序列化單個元素。
長話短說,在不了解 C 方面的更多信息的情況下,我無法告訴您應該如何序列化 Python 方面。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.