2010-11-10 13 views
33

यदि मेरे पास कोड के अनुवर्ती 2 सेट हैं, तो मैं उन्हें एक साथ कैसे चिपका सकता हूं?मैं पाइथन सूची को ctypes का उपयोग कर एक सी सरणी में कैसे परिवर्तित करूं?

void 
c_function(void *ptr) { 
    int i; 

    for (i = 0; i < 10; i++) { 
     printf("%p", ptr[i]); 
    } 

    return; 
} 


def python_routine(y): 
    x = [] 
    for e in y: 
     x.append(e) 

मैं x में तत्वों की एक संगत सूची के साथ c_function को कैसे कॉल कर सकता हूं? मैंने x को c_void_p पर डालने का प्रयास किया, लेकिन यह काम नहीं किया।

मैं भी तरह

x = c_void_p * 10 
for e in y: 
    x[i] = e 

कुछ का उपयोग करने की कोशिश की, लेकिन यह एक सिंटैक्स त्रुटि हो जाता है।

सी कोड स्पष्ट रूप से एक सरणी का पता चाहता है। मैं ऐसा कैसे हो सकता हूं?

उत्तर

61

निम्नलिखित कोड मनमाने ढंग से सूची पर काम करता है: 255 आइटम के साथ की तुलना में अधिक सरणियों बनाने के लिए

import ctypes 
pyarr = [1, 2, 3, 4] 
arr = (ctypes.c_int * len(pyarr))(*pyarr) 
+0

पायथन में "* पायर" ... इसका क्या अर्थ है? – AaronYC

+4

@AaronYC मुझे भ्रम के लिए खेद है; 'पायर' एक साधारण पायथन सूची है, जैसे 'पायर = [1,2,3,4] '। यदि आप नाम से पहले स्टार के बारे में सोच रहे हैं, तो इसे देखें: http://stackoverflow.com/questions/400739/what-does-mean-in-python –

+1

बहुत बहुत धन्यवाद ... आपके द्वारा दिया गया लिंक है मुझे क्या चाहिए ... – AaronYC

8

the ctypes tutorial से:

>>> IntArray5 = c_int * 5 
>>> ia = IntArray5(5, 1, 7, 33, 99) 
+0

प्रयास करें। –

+2

255 से अधिक वस्तुओं के साथ काम करता है: 'IntArray300 = c_int * 300; arrayWith300Elements = IntArray300 (* सूची ([i i श्रेणी में (300)])) –

संबंधित मुद्दे

 संबंधित मुद्दे