我是 python 和 ctypes 的新手。我所拥有的是:-
C程序:
struct query
{
uint16_t req_no;
uint32_t req_len;
uint64_t req;
};
struct response
{
uint16_t req_no;
uint16_t status;
uint32_t value_len;
uint64_t value;
};
// functions for creating query and response packets using
// above structs respectively, returning char buffer.
char* create_query(//some args);
char* create_response(//some args);
我为上面的 C 代码创建了一个 libquery.so。我的 TCP 服务器是一个 C 程序。我正在尝试为此创建一个 TCP python 客户端(我的项目需要它!)。
我可以从 python 客户端成功发送查询和接收数据(使用 libquery.so 中的函数)。但是当我得到响应数据时,我想将其转换为“结构响应”类型。我在 python 中创建了一个类似的“结构”类,但无法从中得到任何东西。
请帮忙。
我的 Python 代码的一些代码片段:-
// some ctypes imports
lib = cdll.LoadLibrary('./libquery.so')
class Info1(Structure):
_fields_ = [("req_no",c_int),
("status",c_int),
("value_len",c_int),
("value",c_int)]
header = Info1()
// Did some TCP connection code here and send data to server by calling
// create_query() method, data confirmed to be correct on server side...
# Receive response data
data = sock.recv(512)
header = str_to_class('Info1')
header.req_no = int(ord(data[0])) // Works; but I don't want to go this ways..
header.status = int(ord(data[1]))
header.value_len = int(ord(data[2]))
header.value = int(ord(data[3]))
print above header values..
我尝试使用:-
def str_to_class(Info1):
return getattr(sys.modules[__name__], Info1)
但不知道如何使它工作。
任何人都知道如何使它工作或者还有其他方法吗?