Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 在ctypes中使用TLV_Python 2.7_Ctypes - Fatal编程技术网

Python 2.7 在ctypes中使用TLV

Python 2.7 在ctypes中使用TLV,python-2.7,ctypes,Python 2.7,Ctypes,我不熟悉ctypes,所以我的问题是: 1) 在ctypes中声明的正确方式是什么 TLV的字段如下所示: 标签(2字节)|长度(2字节)|数据(可变长度) 下面的声明正确吗 类Tlv(结构):_字段=[(“标记”,c_ushort), (“len”,c_ushort), (“数据”,指针(立方字节))] 2) 客户端和服务器交换具有以下结构的消息: 标头(包括数据长度)|数据(由TLV组成的字节缓冲区) 如何将字节缓冲区读入(解析)ctypes中的TLV Struct的数据字段应该是*字节:(

我不熟悉ctypes,所以我的问题是:

1) 在ctypes中声明的正确方式是什么 TLV的字段如下所示:

标签(2字节)|长度(2字节)|数据(可变长度)

下面的声明正确吗

类Tlv(结构):_字段=[(“标记”,c_ushort), (“len”,c_ushort), (“数据”,指针(立方字节))]

2) 客户端和服务器交换具有以下结构的消息:

标头(包括数据长度)|数据(由TLV组成的字节缓冲区)


如何将字节缓冲区读入(解析)ctypes中的TLV

Struct的
数据
字段应该是*字节:
(“数据”,指针(c_ubyte))
(s不见了,我不知道它是故意的还是错误的)。这当然是一个输入错误。缓冲区通常是打包的(
\u pack=1
)和大端(
bigendianstruct
)。定义
标题
并将其从缓冲区复制为
offset=0
header=header。从缓冲区复制(buf,offset)
。然后增加
offset+=sizeof(header)
,并循环以获取TLV。在循环中,从缓冲区拷贝(buf,offset)
获取
tlv\u头=TLVHeader.并递增
offset+=sizeof(tlv\u头)
。然后获取
data=(dtype\u from\u tag*length)。from\u buffer\u copy(buf,offset)
和increment
offset+=sizeof(data)
。当偏移量
时重复
。您也可以使用
struct
模块进行此操作。Thanx,我将尝试您的建议。如果您在实现此功能时遇到问题,您可以用您尝试过的内容修改您的问题,以便更明确地回答。