2011-06-06 13 views
8

में एक पूर्णांक सरणी को कैसे पढ़ा जाए, मैं MATLAB से MEX-function में uint8 प्रकार का एक पूर्णांक सरणी पास कर रहा हूं। मैं इन मूल्यों को कैसे पढ़ूं? मैंने इसका उपयोग करने की कोशिश की:मैक्स-फ़ंक्शन

int *n; 
n = (int *) mxGetData(prhs[0]); 

लेकिन मूल्य जंक के रूप में बाहर आते हैं। मैंने

double *n; 
n= mxGetPr(prhs[0]); 

और इस मामले में जंक वैल्यू भी दिखाई दिए।

इसका समाधान क्या है?

असल में मैं मेक्स-फ़ंक्शन में पूर्णांक मान पढ़ना चाहता हूं लेकिन mxGetPr डबल प्रकार देता है।

उत्तर

1

आपको यह सुनिश्चित करना चाहिए कि आपके द्वारा पढ़े गए बाइट्स की संख्या, और इन बाइट्स की व्याख्या इनपुट डेटा (जो फॉर्म मैटलैब आती है) में समान है और आउटपुट सरणी में (सरणी जिसे आप मेक्सिको में पढ़ते हैं समारोह)। चूंकि uint8 8 बिट लंबे हैं, double और int दोनों बाइट्स की गलत संख्या पढ़ेंगे, और इन बाइट्स को गलत व्याख्या करेंगे।

stdint.h शीर्षलेख शामिल करने का प्रयास करें, और उस सरणी के लिए uint8_t डेटा प्रकार का उपयोग करें।

8

edit([matlabroot '/extern/examples/mex/explore.c']); 

का उपयोग कर वहाँ में डेमो MEX-समारोह explore.c, जो आप MATLAB में खोल सकते हैं पर एक नजर डालें तो आप कार्यों जिनके नाम सभी analyze_ और फिर एक साथ शुरू की एक गुच्छा मिल जाएगा टाइप करें (उदाहरण के लिए, analyze_uint8)। उन कार्यों में आप mxGetData के लिए कॉल के उत्पादन इस तरह, एक विशेष सी प्रकार के लिए डाली जा रही देखेंगे:

pr = (unsigned char *)mxGetData(array_ptr); 

pr अब array_ptr, unsigned char की एक सरणी का असली भाग के लिए कहते हैं।

+0

बहुत धन्यवाद, एससीफ़्रेंच! – Serg