Python to C#:如何格式化套接字数据?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python to C#:如何格式化套接字数据?相关的知识,希望对你有一定的参考价值。

我正在将一个python通信库转换为C#,并且在通过tcp发送之前无法解释字符串的格式化方式。

代码的相关部分如下:

struct.pack(
            '!HHBH'+str(var_name_len)+'s',
            self.msg_id,
            req_len,
            flag,
            var_name_len,
            self.varname
)

然后它发送:sendall()

我查看了Python文档(https://docs.python.org/2/library/struct.html),但我仍然在第一行写一个空白:'!HHBH'+ str(var_name_len)+'s',我知道这是设置格式的地方,但它是什么格式化为超出我。

我正在翻译的python代码可以在以下链接中找到:https://github.com/linuxsand/py_openshowvar/blob/master/py_openshowvar.py

任何python和C#vigilantes可以帮我建立这座桥吗?

编辑:根据jas的回答,我编写了以下c#结构:

public struct messageFormat
    {
        ushort messageId;
        ushort reqLength;
        char functionType;
        ushort varLengthHex;
        string varname; 
    ...

一旦我填充它,我将需要通过TCP发送它。我有一个打开的套接字,但需要转换为byte []我假设我可以使用socket.send(byte [])?

谢谢

答案

格式化的是格式字符串后面的五个参数。每个参数在格式字符串中都有对应的元素。

为了便于解释,我们假设var_name_len的值为12(可能是因为var_name是一个长度为12的字符串,在这个假设的情况下)。

所以格式字符串将是

!HHBH12s

根据文档打破这一点:

!    Big-ending byte ordering will be used
H    self.msg_id will be packed as a two-byte unsigned short
H    req_len will be packed as above
B    flag will be packed as a one-byte unsigned char
H    var_name_len will be packed as a two-byte unsigned short
12s  self.varname will be packed as a 12-byte string

以上是关于Python to C#:如何格式化套接字数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 df.to_csv 为多索引数据帧 python3 格式化 csv 文件

C/Python 套接字性能?

如何序列化apache箭头c ++表,通过套接字传输,并在python端反序列化

如何将字节数据从套接字写入 C 中的无符号字符向量? [关闭]

C:你如何通过套接字读取和解包消息?

查找最大 UDP 有效负载——python 套接字发送/发送