日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

buffer转int python_C/C++实战014:字符串转换及Python传参数组

發布時間:2024/10/8 python 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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传参数组的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。