JNI Android-将char *转换为字节数组并将其返回给Java [英] JNI Android - Converting char* to byte array and return it to java
问题描述
我最初使用一个函数以UTF-8字符串的形式将char *返回给Java,但是由于不断出错,我编写了以下函数以Java的形式返回char*
作为Java byte[]
,这样我就可以尝试将数组转换为Java端的String:
I initially used a function to return a char* to java as UTF-8 string, but since I kept getting errors, I wrote the following function to return a char*
as a Java byte[]
, so that I could try to convert the array into a String in java side:
jbyteArray Java_com_vektor_amapper_util_InputDeviceManager_getDevNameBytes(JNIEnv* env, jobject thiz, jint index) {
if(pDevs[index].device_name == NULL) return NULL;
int n=0;
while(pDevs[index].device_name){
n++;
} if (n==0) return NULL;
jbyteArray arr = (*env)->NewByteArray(env, n);
(*env)->SetByteArrayRegion(env,arr,0,n, (jbyte*)pDevs[index].device_name);
return arr;
}
但是当我调用它时,我的应用程序崩溃了.我想念什么吗?
But when I call it my application crashes. Am I missing something?
更新:该条件缺少++,这导致了无限循环.但是现在有了以下代码:
Update: The condition was missing a ++ and this caused an infinite loop. But now with the following code:
jbyteArray Java_com_vektor_amapper_util_InputDeviceManager_getDevNameBytes(JNIEnv* env, jobject thiz, jint index) {
int n=0;
if(pDevs[index].device_name == NULL) return NULL;
while(pDevs[index].device_name++){
n++;
} if(n==0) return NULL;
jbyteArray arr = (*env)->NewByteArray(env, n);
(*env)->SetByteArrayRegion(env,arr,0,n, (jbyte*)pDevs[index].device_name);
return arr;
}
我收到这个奇怪的JNI警告:
I get this weird JNI warning:
06-15 22:40:02.303:W/dalvikvm(7616):JNI警告:负jsize(NewByteArray)
06-15 22:40:02.303: W/dalvikvm(7616): JNI WARNING: negative jsize (NewByteArray)
怎么可能,因为我只增加了n
的值?
How can it be since I am only increasing the value of n
?
更新2:,以下代码有效:
jbyteArray Java_com_vektor_amapper_util_InputDeviceManager_getDevNameBytes(
JNIEnv* env, jobject thiz, jint index) {
if(pDevs[index].device_name == NULL) return NULL;
int n=0;
char* p = pDevs[index].device_name;
while(*p++){
n++;
} if(n<=0) return NULL;
jbyteArray arr = (*env)->NewByteArray(env, n);
(*env)->SetByteArrayRegion(env,arr,0,n, (jbyte*)pDevs[index].device_name);
return arr;
}
推荐答案
不是吗?
char* p = pDevs[index].device_name;
while( *p++) {
...
}
这篇关于JNI Android-将char *转换为字节数组并将其返回给Java的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!