python 與 C 的互動 ctypes庫使用

2021-10-03 17:13:47 字數 1972 閱讀 7178

python 與 c 的互動(ctypes庫使用)

ctypes是python的乙個外部庫,可以使用python語言呼叫已經編譯好的c語言函式以及資料型別並進行資料交換等。ctypes的官方文件在

1.生成c語言函式

#step 1:  test.c

#include

int add(int a, int b)12

3456

782.編譯動態鏈結庫生成 libtest.so檔案(dll)

gcc -fpic -shared test.c -o libtest.so  

13.呼叫dll檔案

#step 3:  test.py

from ctypes import *

mylib = cdll("libtest.so")   或者   cdll.loadlibrary("libtest.so")   

add = mylib.add

add.argtypes = [c_int, c_int]  # 引數型別,兩個int(c_int是ctypes型別,見上表)

add.restype = c_int # 返回值型別,int (c_int 是ctypes型別,見上表)

sum = add(3, 6)12

3456

783.指標和引用

對指標例項賦值只會改變其指向的記憶體位址,而不是改變記憶體的內容。指標例項有乙個contents屬性,返回這個指標所指向的物件。

函式    說明

byref(x [, offset])    返回 x 的位址,x 必須為 ctypes 型別的乙個例項。相當於 c 的 &x 。 offset 表示偏移量。

pointer(x)    建立並返回乙個指向 x 的指標例項, x 是乙個例項物件。

pointer(type)    返回乙個型別,這個型別是指向 type 型別的指標型別, type 是 ctypes 的乙個型別。

from ctype import *  

i = c_int(1)  

pi = pointer(c_int)(i)  

pi2 = pointer(i)

print pi.contents  #返回指標指向物件的值

print pi2.contents12

3456

pointer 和 pointer 的區別是,pointer 返回乙個例項,pointer 返回乙個型別。

4.結構型別資料

structures和unions必須繼承structure和union基礎類,它們都在ctypes模組中定義,每乙個子類必須定義個fields屬性,fields是乙個二維的tuples列表,包含著每個field的name及type,這field型別必須是乙個ctypes型別,如c_int,或者任何其他的繼承ctypes的型別,如structure, union, array, 指標等。

from ctypes import *  

import types  

class test(structure):  

_fields_ = [('x', c_int),  

('y', c_char)]  

test1 = test(1, 2)  12

3456

如結構體用於鍊錶操作,即包含指向結構體指標時,則需如下定義

from ctypes import *  

import types  

class test(structure):  

pass  

test._fields_ = [('x', c_int),  

('y', c_char),  

('next', pointer(test))]  12

3456

7參考文獻: 

1.  

2.  

3.

python與cad互動 python與C 互動

python和c 能進行有效的互動,c 呼叫python的一些小用法 寫了乙個python指令碼匯入發生異常,可能是編碼問題 如存在中文 python預設的是ascii 可加上 usr bin python coding utf 8 參見 定義類c資料結構 class point structure...

詳解c 與python的互動方式

在平時工作中,需求有多種實現方式 根據不同的需求可以採用不同的程式語言來實現。發揮各種語言的強項 如 python的強項是 資料分析 人工智慧等 net 開發桌面程式介面比python更簡單 方便 美觀 那麼就存在各種語言間互動,本篇主要介紹幾種c 與 python的互動方式。1 ironpytho...

mysql與python的互動

conn connect 引數列表 cursor1 conn.cursor mode表示移動的方式 mode的預設值為relative,表示基於當前行移動到value,value為正則向下移動,value為負則向上移動 mode的值為absolute,表示基於第一條資料的位置,第一條資料位置為零 建...