Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.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中的c dll获取字符数组作为字符串_Python_C_Ctypes - Fatal编程技术网

从python中的c dll获取字符数组作为字符串

从python中的c dll获取字符数组作为字符串,python,c,ctypes,Python,C,Ctypes,我是ctypes的初学者,我不知道如何在python中将char数组转换为字符串。我已经开始使用: create_string_buffer(bytes(var,'utf8'))来填充数组,但使用“byref()”无法将其作为字符串返回 如果有人知道你会成为救生员。提前谢谢 ctypes页: 如果没有看到一些代码,很难判断,但下面是一个示例: 导入系统 >>>导入ctypes >>>“Python{:s}on{:s}”。格式(sys.version,sys.platform) “Python 3

我是ctypes的初学者,我不知道如何在python中将char数组转换为字符串。我已经开始使用:

create_string_buffer(bytes(var,'utf8'))
来填充数组,但使用“byref()”无法将其作为字符串返回

如果有人知道你会成为救生员。提前谢谢

ctypes页:
如果没有看到一些代码,很难判断,但下面是一个示例:

导入系统 >>>导入ctypes >>>“Python{:s}on{:s}”。格式(sys.version,sys.platform) “Python 3.5.2(默认值,2017年11月23日,16:37:01)\n[GCC 5.4.0 20160609]在linux上” >>>src=“一些伪Python字符串” >>>src\u charp=ctypes.create\u string\u buffer(src.encode()) >>>dst_初始值=b“刚刚” >>>创建字符串缓冲区(len(dst_首字母)+len(src)+1) >>>夏普酒店 >>>dst_charp.value b“ >>>对于idx,枚举中的c(dst_首字母): ... dst_charp[idx]=c ... >>>dst_charp.value 只是 >>>ctypes.CDLL(无).strcat(dst_charp,src_charp) 32414128 >>>夏普酒店 >>>dst_charp.value b'只是一些伪Python字符串' >>>dst=dst_charp.value.decode() >>>dst '只是一些伪Python字符串' 注释

  • 使用作为示例。有关如何操作的更多详细信息,请查看
  • 没有涉及到
    byref

您尝试过了吗:解决方案确实很难看:cp=create\u string\u buffer(字节(“,'utf8')),所以参数是inout参数。我修改了代码以反映这一点。正如我在开始时所说,如果没有任何代码,很难猜测在您的情况下会发生什么。为了正确理解,应该提供调用函数的Python代码以及C函数声明。
>>> import sys
>>> import ctypes
>>> "Python {:s} on {:s}".format(sys.version, sys.platform)
'Python 3.5.2 (default, Nov 23 2017, 16:37:01) \n[GCC 5.4.0 20160609] on linux'
>>> src = "some dummy Python string"
>>> src_charp = ctypes.create_string_buffer(src.encode())
>>> dst_initial = b"Just "
>>> dst_charp = ctypes.create_string_buffer(len(dst_initial) + len(src) + 1)
>>> dst_charp
<ctypes.c_char_Array_25 object at 0x7fe6c41209d8>
>>> dst_charp.value
b''
>>> for idx, c in enumerate(dst_initial):
...     dst_charp[idx] = c
...
>>> dst_charp.value
b'Just '
>>> ctypes.CDLL(None).strcat(dst_charp, src_charp)
32414128
>>> dst_charp
<ctypes.c_char_Array_25 object at 0x7fe6c41209d8>
>>> dst_charp.value
b'Just some dummy Python string'
>>> dst = dst_charp.value.decode()
>>> dst
'Just some dummy Python string'