繁体   English   中英

JNI Android - 将char *转换为字节数组并将其返回给java

[英]JNI Android - Converting char* to byte array and return it to java

我最初使用一个函数将一个char *作为UTF-8字符串返回给java,但由于我一直收到错误,我编写了以下函数来返回一个char*作为Java byte[] ,这样我就可以尝试转换数组到java端的String:

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;
}

但是当我调用它时,我的应用程序崩溃了。 我错过了什么吗?

更新:条件缺少++,这导致无限循环。 但现在使用以下代码:

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警告:

06-15 22:40:02.303:W / dalvikvm(7616):JNI警告:负jsize(NewByteArray)

怎么可能因为我只增加了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++) {
...
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM