Intenté pasar la matriz de caracteres de java a c. He buscado en Google el camino para implementarlo. Pero cuando intenté acceder al valor de la matriz, el valor no era correcto.Android Java JNI y C Char array No se puede reconocer el valor
De hecho, traté de darle un carácter a la matriz. Al igual que buffer[i]='z'
, y el resultado es correcto en Android.
Por cierto, el valor que quería era el valor enviado por el rs232. El valor del rs232 estaba bien.
Alguien me dijo que usara el bytearray. ¿Funcionaría? Tenía miedo de que el valor del RS232 no podría ser tienda en el 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;
}
¿Cuál es su pregunta? – jogabonito
si quieres ** pasar la matriz char de java a c ** te recomendaría que simplemente las pases como char * –
si quieres usar una matriz de bytes y luego usa esta ** jbyteArray jb; jb = (* env) -> NewByteArray (env, finfo.st_size); (* env) -> SetByteArrayRegion (env, jb, 0, \t \t finfo.st_size, (jbyte *) m); close (fd); ** La matriz se puede liberar explícitamente mediante ** (* env) -> ReleaseByteArrayElements (env, jb, (jbyte *) m, 0); ** –