buffer转int python_C/C++实战014:字符串转换及Python传参数组
今天在寫北京精雕宏變量獲取的時候遇到一個傳值為數組的例子,在獲取宏參數時需要我們提供獲取值的個數和對應的#代碼int數組(最多一次可傳遞64個),接口返回給我們的是一個double數組(最多一次可返回64個),在c++我們只需定義一個數組然后傳給方法即可,但今天要做的是通過python來調用c++的動態連接庫。
python如何傳遞int數組
ctypes是Python的一個外部庫,提供和C語言兼容的數據類型,通過ctypes可以調用c++編寫的DLL中的接口函數,所以這里我們用ctypes來定義與c類型對應的數組類型,我在python中寫了一個測試方法來調用c++的接口函數。
def dome(): dll = ctypes.cdll.LoadLibrary('C:/Users/Java/Desktop/JD/Debug/JD.dll')#引用c++動態鏈接庫 num=7 #定義數組長度 IntArray = ctypes.c_int * num #申明一個數組 ia = IntArray(501,502,503,504,505,506,507) #給數組賦值 res = dll.test(ia,num)#調用c++動態鏈接庫接口 pyResult=ctypes.string_at(res) #轉換c++返回值 print(pyResult)#輸出結果dome()C++接受傳參
由于精雕接口需要連接精雕才能實現,所以這里我寫了一個測試方法來驗證是否能夠成功獲取到Python傳過來的值,然后我們通過循環遍歷再將接收到的值提取出來轉成char*返回給Python。
為什么不直接返回double數組?因為在c/c++中沒有數組這種基本數據類型,所以無法直接返回一個數組,因此這里我采取 的是將數組轉成字符串格式輸出。
CString轉char*問題
GetBuffer字符轉換
這里遇到個轉類型的問題,那就是CString轉char*,這里我先用的是GetBuffer,將CString轉char*并在c中對轉換后的值進行打印,輸出結果無誤,而當Python調用時輸出的結果卻是以十六進制數 dd 規定的字符: xdd xdd xdd xdd xdd xdd xdd ......
char* test(int VarNo[64],int len){try{CString val="";for(int i=0;i總結
以上是生活随笔為你收集整理的buffer转int python_C/C++实战014:字符串转换及Python传参数组的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: viso怎么控制连接线_德国菲斯曼故障出
- 下一篇: python dict 排序原理_第一章