android - JNI c语言里的char数组怎么转成java的char数组?
问题描述
java的实体里定义的char[] name JNI定义结构体属性char[] name将结构体属性值(中文)传给java是乱码,怎么解决?不要让我改变属性类型!
问题解答
回答1:参考一下这篇文章
要先搞清楚两边分别是什么编码。
回答2:C中的char[]字符串,默认情况下是UTF-8编码的可以通过JNIEnv的NewStringUTF()函数将C中的char[]字符串转为Java的字符串,这个函数的签名为:
jstring NewStringUTF(const char* bytes)回答3:
看个最简单的例子:
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());}
相关文章:
1. 为什么我ping不通我的docker容器呢???2. 关于docker下的nginx压力测试3. 服务器端 - 采用nginx做web服务器,C++开发应用程序 出现拒绝连接请求?4. python - pandas按照列A和列B分组,将列C求平均数,怎样才能生成一个列A,B,C的dataframe5. angular.js - Ionic 集成crosswalk后生成的apk在android4.4.2上安装失败???6. javascript - nidejs环境设置操作一直出现这种问题怎么解决?7. dockerfile - [docker build image失败- npm install]8. java - Tomcat 不同的域名访问同一个项目的不同网页9. javascript - Angular controlller控制域和原生js的关系10. java - 静态属性中的赋值和静态代码块中的赋值有什么区别?
