Python與C參數互動—結構體指標作為參數 執行個體

來源:互聯網
上載者:User

在Python中某些時候需要C做效率上的補充. 在實際應用中,需要做部分資料的互動. Python 可以通用 ctypes 模組很好地調用C. 下面示範了 Python 中調用C一個標準函數. 傳遞一個結構指標入. 得到C中分配記憶體資料 傳遞出. 希望對你的Python 學習有所協助.

1 test.c

#include <stdio.h>
#include <stdlib.h>

typedef struct {
        unsigned char words[10];
} keywords;

typedef struct {
        keywords *kws;
        unsigned int len;
} outStruct;

int test(outStruct *o){
        unsigned int i=4;
        o->kws = (keywords *)malloc(sizeof(unsigned char)*10*i);
        strcpy(o->kws[0].words,"test 1");
        strcpy(o->kws[1].words,"test 2");

        o->len = i;
        return 1;
}




2 編譯

gcc-c
-fPIC-o test.o test.c
gcc-shared test.o-o
test.so

3 test.py

from ctypesimport
*

class keywords(Structure):
_fields_= [
('words', c_char*10),]

class outStruct(Structure):
_fields_= [
('kws', POINTER(keywords)),
('len', c_int),]

libc=CDLL("./test.so")
libc.test.argtypes= [POINTER(outStruct)]

o= outStruct()

ret= libc.test(byref(o))

print o.kws[0].words;
print o.kws[1].words;
print o.len

4 測試結果

b'test 1'
b'test 2'
4

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.