繁体   English   中英

用Ctypes传递填充字符串

[英]Passing a padded string with 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), 0)

但这感觉是做事的一种非常邪恶的方式。

这是正确的方法吗?

cast返回Python字符串的内部指针。 不要将不可变的Python字符串传递给需要可变缓冲区的函数。 使用create_string_buffer创建一个可变的char数组(请参见16.17.1.4。基本数据类型 )。 对于偏移量,请将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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM