को पहचान नहीं सकते हैं मैंने जावा से सी तक चार सरणी पारित करने का प्रयास किया। मैंने इसे लागू करने के तरीके को गुमराह किया है। लेकिन जब मैंने सरणी के मान तक पहुंचने का प्रयास किया, तो मान सही नहीं था।एंड्रॉइड जावा जेएनआई और सी चार सरणी मान
वास्तव में, मैंने सरणी को एक चरित्र देने की कोशिश की। बस buffer[i]='z'
की तरह, और परिणाम एंड्रॉइड में सही है।
बीटीडब्ल्यू, जो मूल्य मैं चाहता था वह आरएस 232 द्वारा भेजा गया मूल्य था। Rs232 से मान ठीक था।
किसी ने मुझे बाइटियर का उपयोग करने के लिए कहा। क्या यह काम करेगा? मैं की है कि RS232 से मूल्य bytearray में दुकान नहीं किया जा सका डर था ....
Java
public native int OpenPort(int portnum,int brates);
public native int ClosePort(int portnum);
public native int READ(char[] databuffer);
public char[] buffer=new char[40];
int i;
for(i=0;i<40;i++)
buffer[i]='s'; //initialization
OpenPort(16,9600); // A function to open the rs232 port
while (i<1000)
{
READ(buffer);
i++;
}
JNI.c
JNIEXPORT jint JNICALL Java_com_example_ndk_Vehicles_READ(JNIEnv *env, jclass
cls,jcharArray databuffer)
{
char tmp[40];
jchar *buffer=(*env)->GetCharArrayElements(env,databuffer,0);
memset(tmp,0,sizeof(tmp));
PollComport(16,tmp,40); //will the problem here ? This function need a unsigned char[]
//,but in the c program I wrote , char[] was ok for this.
memcpy(buffer,tmp,40);
(*env)->ReleaseCharArrayElements(env, databuffer, buffer, 0);
return 0;
}
आपका प्रश्न क्या है? – jogabonito
यदि आप ** जावा से सी से चार सरणी पास करना चाहते हैं ** मैं आपको बाइट सरणी का उपयोग करना चाहता हूं तो बस उन्हें चार * –
के रूप में पास करने की सलाह दूंगा, फिर इस ** jbyteArray jb का उपयोग करें; जेबी = (* एनवी) -> न्यूबीटएरे (एनवी, फिनफो.स्ट_साइज); (* env) -> SetByteArrayRegion (env, jb, 0, \t \t finfo.st_size, (jbyte *) m); बंद (एफडी); ** सरणी को ** (* env) -> रिलीजबेटएरेरेमेंट्स (एनवी, जेबी, (जेबीटी *) एम, 0) द्वारा स्पष्ट रूप से मुक्त किया जा सकता है; ** –