python调用C函数返回参数为char *导致字符串被截断问题

python使用的是ctypes来调用C函数不必多说:

from ctypes import *
SDLL = CDLL('./dll/XXX.dll')
SDLL.func1.restype = c_char_p
SDLL.func1.restype = c_char_p

问题:

这里返回值类型为c_char_p也是没有问题的。但是我这边返回的char *却是一段二进制内存,直接返回总是会莫名其妙地被截断,python根本无法获取全部的数据。

处理:

这里就要使用传递参数了,直接将输入参数进行返回。

但是python传入的数据都是为const char *类型,无法被修改。

需要使用create_string_buffer来处理~!

1.首先获取传递回来的参数大小size!
2.填充空格
content = content.ljust(size)
3.创建缓存区
buffers = create_string_buffer(size)
4.将数据写入
buffers.value = content
5.调用函数
SDLL.func1(buffers)
6.获取修改之后的数据,就算是二进制,但是大小也是对的,也行打印不出来
print(buffers.raw)

 

 

你可能感兴趣的:(python)