Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.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 传递带有Ctypes的填充字符串_Python_Ctypes - Fatal编程技术网

Python 传递带有Ctypes的填充字符串

Python 传递带有Ctypes的填充字符串,python,ctypes,Python,Ctypes,我正在使用ctypes与库接口。有一种方法需要在两侧填充已传递的char缓冲区,才能写入网络页眉/页脚,但指针必须指向预先填充的位置 到目前为止,我已经通过以下方式实现了这一点: send_buffer = b'\0' * 18 + payload + b'\0' * 4 ptr = ctypes.cast (send_buffer, ctypes.c_void_p) ptr.value += 18 lws.libwebsocket_write (wsi, ptr, len (payload),

我正在使用
ctypes
与库接口。有一种方法需要在两侧填充已传递的
char
缓冲区,才能写入网络页眉/页脚,指针必须指向预先填充的位置

到目前为止,我已经通过以下方式实现了这一点:

send_buffer = b'\0' * 18 + payload + b'\0' * 4
ptr = ctypes.cast (send_buffer, ctypes.c_void_p)
ptr.value += 18
lws.libwebsocket_write (wsi, ptr, len (payload), 0)
但这感觉像是一种非常邪恶的做事方式


这是正确的方法吗?

cast
返回Python字符串的内部指针。不要将不可变的Python字符串传递给需要可变缓冲区的函数。使用
create\u string\u buffer
创建可变
char
数组(读取部分)。对于偏移量,将
byref
与可选的
offset
参数一起使用:

send_buf = ctypes.create_string_buffer(b'\0' * 18 + payload + b'\0' * 4)
lws.libwebsocket_write(wsi, ctypes.byref(send_buf, 18), len(payload), 0)

send_buf.value # null terminated
send_buf.raw   # complete array