android - JNI c语言里的char数组怎么转成java的char数组?
黄舟
黄舟 2017-04-17 17:51:41
[Android讨论组]

java的实体里定义的char[] name JNI定义结构体属性char[] name将结构体属性值(中文)传给java是乱码,怎么解决?不要让我改变属性类型!

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回复(3)
PHPz

参考一下这篇文章

要先搞清楚两边分别是什么编码。

迷茫

C中的char[]字符串,默认情况下是UTF-8编码的可以通过JNIEnv的NewStringUTF()函数将C中的char[]字符串转为Java的字符串,这个函数的签名为:

jstring NewStringUTF(const char* bytes)
高洛峰

看个最简单的例子:

JNIEXPORT jstring JNICALL Java_com_example_gnaix_ndk_NativeMethod_getString
        (JNIEnv *env, jclass object, jstring str){

    //1. 将unicode编码的java字符串转换成C风格字符串
    const char *buf_name = env->GetStringUTFChars(str, 0);
    if(buf_name == NULL){
        return NULL;
    }
    int len = strlen(buf_name);
    char n_name[len];
    strcpy(n_name, buf_name);

    //2. 释放内存
    env->ReleaseStringUTFChars(str, buf_name);

    //3. 处理 n_name="ro.serialno"
    char buf[1024];
    __system_property_get(n_name, buf);
    LOGD("serialno : %s", buf);

    //4. 去掉尾部"\0"
    int len_buf = strlen(buf);
    string result(buf, len_buf);

    return env->NewStringUTF(result.c_str());
}
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号