簡體   English   中英

如何使用 python 創建結構 c 並在套接字上發送

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM