国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

使用Python向C語言的鏈接庫傳遞數(shù)組、結(jié)構(gòu)體、指針類型的數(shù)據(jù)

2020-02-16 00:58:42
字體:
供稿:網(wǎng)友

使用python向C語言的鏈接庫傳遞數(shù)組、結(jié)構(gòu)體、指針類型的數(shù)據(jù)

由于最近的項目頻繁使用python調(diào)用同事的C語言代碼,在調(diào)用過程中踩了很多坑,一點一點寫出來供大家參考,我們?nèi)匀皇鞘褂胏types來調(diào)用C語言的代碼庫。

至于如何調(diào)用基礎(chǔ)數(shù)據(jù)類型的數(shù)據(jù),請大家參考我的另外一篇文章:Python使用ctypes調(diào)用C/C++的方法

1. 使用python給C語言函數(shù)傳遞數(shù)組類型的參數(shù)

想必很多時候,C語言會使用數(shù)組作為參數(shù),在之前我們使用過ctypes的一些數(shù)據(jù)類型作為C語言參數(shù)類型,包括byte、short、int、double之類的,但是在使用數(shù)組類型的時候,我們也是有著類似的做法,下面我們看實例:

1.1 C語言的代碼塊

一個簡單的數(shù)組輸入,以及一個簡單將數(shù)組作為參數(shù)的函數(shù)

int input[2] = [0, 1]void printIntArray(int[] input){  for(int i = 0; i < 2; i ++){    print(input[i]);  }}

1.2 python代碼塊

下面我們將演示如何調(diào)用上面的代碼

from ctypes import *# 假設(shè)上面的代碼被編譯成了一個XXXXlib.so的文件dll = CDLL('XXXXlib.so')# 聲明一個數(shù)組類型INPUT = c_int * 2# 實例化一個長度為2的整型數(shù)組input = INPUT()# 為數(shù)組賦值(input這個數(shù)組是不支持迭代的)input[0] = 1input[1] = 2# 引用C語言的函數(shù)print_int_array = dll.printIntArray# 調(diào)用C語言的函數(shù)print_int_array(input)

1.3 小結(jié)

使用數(shù)組的方法基本就是這樣的,聲明什么類型的數(shù)組只需要根據(jù)之前python官方文檔里ctypes使用說明對照著聲明數(shù)組就可以了。

2. 使用python給C語言函數(shù)傳遞結(jié)構(gòu)體類型的參數(shù)

當(dāng)然,為了滿足一些個性化的需求和為了使程序更容易讓人理解,更多的時候開發(fā)人員也會使用結(jié)構(gòu)體類型的變量為函數(shù)賦值。現(xiàn)在我們使用ctypes來實例化一個C語言的結(jié)構(gòu)體,請看實例:

由于第一部分我們已經(jīng)介紹了如何簡單的調(diào)用C語言的函數(shù),我們下面只寫結(jié)構(gòu)體相關(guān)的python代碼

from ctypes import *# 聲明一個類,繼承自ctypes.Structureclass PythonStructure(Structure):  _fields_:[('param1',c_int),('param2', c_int),('param3', c_int * 2)]# 實例化變量python_structure = PythonStructure()# 賦值python_structure.param1 = 1python_structure.param2 = 3PARAM = c_int * 2param3 = PARAM()param3[0] = 3param3[1] = 4python_structure.param3 = param3

從代碼中我們可以看到,我們聲明了一個class,使其繼承自ctypes.Structure,然后在類的內(nèi)部聲明了變量,fields這樣一個變量域,里面用元組存貯這結(jié)構(gòu)體的每個結(jié)構(gòu)體內(nèi)部變量的變量名和數(shù)據(jù)類型。

然后在實際的使用過程中,首先要實例化一個PythonStructure類型的變量,然后為其各個內(nèi)部變量賦值。

3. 使用python給C語言函數(shù)傳遞指針類型的參數(shù)

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 独山县| 滦南县| 延边| 天台县| 东平县| 江达县| 客服| 嘉兴市| 德保县| 上思县| 吴旗县| 上饶市| 辽源市| 清丰县| 孝昌县| 康平县| 报价| 涪陵区| 徐州市| 和田县| 莲花县| 上思县| 高雄市| 莱州市| 玛沁县| 广灵县| 罗山县| 东至县| 英山县| 鹰潭市| 平顺县| 神木县| 昌乐县| 涡阳县| 黄浦区| 高清| 高清| 龙游县| 中山市| 丹巴县| 吴桥县|