Python 2.7 在ctypes中使用TLV
我不熟悉ctypes,所以我的问题是: 1) 在ctypes中声明的正确方式是什么 TLV的字段如下所示: 标签(2字节)|长度(2字节)|数据(可变长度) 下面的声明正确吗 类Tlv(结构):_字段=[(“标记”,c_ushort), (“len”,c_ushort), (“数据”,指针(立方字节))] 2) 客户端和服务器交换具有以下结构的消息: 标头(包括数据长度)|数据(由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中的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)
和incrementoffset+=sizeof(data)
。当偏移量
时重复。您也可以使用struct
模块进行此操作。Thanx,我将尝试您的建议。如果您在实现此功能时遇到问题,您可以用您尝试过的内容修改您的问题,以便更明确地回答。