Ho provato a passare il char array da java a c. Ho cercato su Google come implementarlo. Ma quando ho provato ad accedere al valore dell'array, il valore non era corretto.Java Java JNI e C Char array Impossibile riconoscere il valore
Infatti, ho provato a dare un carattere all'array. Proprio come buffer[i]='z'
, e il risultato è corretto in Android.
Btw, il valore che volevo era il valore inviato da rs232. Il valore di rs232 era ok.
Qualcuno mi ha detto di usare il bytearray. Funzionerebbe? Avevo paura di che il valore da RS232 non poteva essere negozio nel 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;
}
Qual è la tua domanda? – jogabonito
se si desidera ** passare l'array di caratteri da java a c **, si consiglia di passarli come char * –
se si desidera utilizzare array di byte quindi utilizzare questo ** jbyteArray jb; jb = (* env) -> NewByteArray (env, finfo.st_size); (* env) -> SetByteArrayRegion (env, jb, 0, \t \t finfo.st_size, (jbyte *) m); close (fd); ** La matrice può essere esplicitamente liberata da ** (* env) -> ReleaseByteArrayElements (env, jb, (jbyte *) m, 0); ** –