C/C++实战014:字符串转换及Python传参数组
1、python如何传递int数组
ctypes是Python的一个外部库,提供和C语言兼容的数据类型,通过ctypes可以调用c++编写的DLL中的接口函数,所以这里我们用ctypes来定义与c类型对应的数组类型,我在python中写了一个测试方法来调用c++的接口函数.

2、C++接受传参
由于精雕接口需要连接精雕才能实现,所以这里我写了一个测试方法来验证是否能够成功获取到Python传过来的值,然后我们通过循环遍历再将接收到的值提取出来转成char*返回给Python。
为什么不直接返回double数组?因为在c/c++中没有数组这种基本数据类型,所以无法直接返回一个数组,因此这里我采取 的是将数组转成字符串格式输出。
1、GetBuffer字符转换
这里遇到个转类型的问题,那就是CString转char*,这里我先用的是GetBuffer,将CString转char*并在c中对转换后的值进行打印,输出结果无误,而当Python调用时输出的结果却是以十六进制数 dd 规定的字符: \xdd \xdd \xdd \xdd \xdd \xdd \xdd ......

2、strcat字符串追加
换个思路,直接转不行我就新建一个char* res空对象,然后将val追加到res中去。这里用到的strcat方法,将val 所指向的字符串追加到 res 所指向的字符串的结尾,pytohn打印的结果为:pyResult= b'\xfd\xfd\xfd\xfd501,502,503,504,505,506,507,'。正确的结果是出来了,但是前面多了些字符:xfd\xfd\xfd\xfd

3、strcpy字符串复制
追加失败我们来尝试下使用strcpy方法,同样新建一个char* res空对象,然后将val复制到res中去。pytohn打印的结果为:pyResult= b'501,502,503,504,505,506,507,',刚好是我们想要的结果。

4、memcpy内存区拷贝
除了strcpy方法我们还可以使用memcpy方法,memcpy与strcpy不同之处在于strcpy只能复制字符串,而memcpy可以复制任意内容,strcpy不需要指定长度,遇到结束符"\0"才结束,所以容易溢出。memcpy则是根据其第3个参数决定复制的长度。所以我们也可以用memcpy来实现以上功能,将从存储区val的值 复制 n 个字符到存储区 res,pytohn打印的结果为:pyResult= b'501,502,503,504,505,506,507,',同样是我们想要的结果。

5、要是实在觉得传数组麻烦,就直接传字符串给c++,让c++来处理字符串,提取需要的内容再转成相应的数组类型,返回的时候也直接用字符串形式传递,Python拿到结果后自行拆解,得到需要的数据即可,总之怎么方便怎么来。

