NDK开发jstring和Cstring转换工具方法(实践有效)
2016-12-01 22:55
405 查看
/** 利用Java的String类来完成字符编码转换 */ char* Jstring2CStr(JNIEnv* env,jstring jstr) { LOGI("enter CStr2Jstring 1"); char* rtn = NULL; jclass clsstring = (*env)->FindClass(env,"java/lang/String"); jstring strencode = (*env)->NewStringUTF(env,"GB2312");//转换成Cstring的GB2312,兼容ISO8859-1 //jmethodID (*GetMethodID)(JNIEnv*, jclass, const char*, const char*);第二个参数是方法名,第三个参数是getBytes方法签名 //获得签名:javap -s java/lang/String: (Ljava/lang/String;)[B jmethodID mid = (*env)->GetMethodID(env,clsstring,"getBytes","(Ljava/lang/String;)[B"); //等价于调用这个方法String.getByte("GB2312"); //将jstring转换成字节数组 LOGI("enter CStr2Jstring 2"); //用Java的String类getByte方法将jstring转换为Cstring的字节数组 jbyteArray barr= (jbyteArray) (*env)->CallObjectMethod(env,jstr,mid,strencode); LOGI("enter CStr2Jstring 3"); jsize alen = (*env)->GetArrayLength(env,barr); LOGI("enter CStr2Jstring 4"); jbyte* ba = (*env)->GetByteArrayElements(env,barr,JNI_FALSE); LOGI("alen=%d\n",alen); if(alen > 0) { rtn = (char*)malloc(alen+1+128); LOGI("rtn address == %p",&rtn);//输出rtn地址 memcpy(rtn,ba,alen); rtn[alen]=0; //"\0" } (*env)->ReleaseByteArrayElements(env,barr,ba,0); return rtn; } /** * C的字符串转jstring的字符串 */ jstring CStr2Jstring( JNIEnv* env, const char* pat) { jclass strClass = (*env)->FindClass(env,"Ljava/lang/String;"); jmethodID mID = (*env)->GetMethodID(env,strClass, "<init>", "([BLjava/lang/String;)V"); jbyteArray bytes = (*env)->NewByteArray(env,(jsize)strlen(pat)); (*env)->SetByteArrayRegion(env,bytes, 0, (jsize)strlen(pat), (jbyte*)pat); //将char* 转换为byte数组 jstring encoding = (*env)->NewStringUTF(env,"GB2312"); return (jstring)(*env)->NewObject(env,strClass, mID, bytes, encoding); }
相关文章推荐
- CString转换成const char*的一种有效方法
- [Tizen开发]Bada应用程序转换到Tizen应用程序-迁移工具安装方法
- CString转换成const char*的一种有效方法
- VC2008中将CString转换成const char*的一种有效方法
- 涉及到的jstring 到CString 的转换和其他一些东西
- 在Decimal转换为CString的方法
- 软件开发工程方法,技术与工具
- 软件开发工程方法、技术与工具
- CString 到 float 的转换 小方法
- [转]迭代化软件开发项目的有效管理实践
- 快速开发时可以使用的Java文件工具方法
- PALM开发教程-第十一章 工具和方法简介
- openssh生成密钥及使用方法,以及puttygen工具自由转换私钥
- 十个必备的.NET开发小工具(9 & 10):版本切换和转换
- int 和 String 互相转换的多种方法-Java基础-Java-编程开发
- C++跨平台开发方法/工具
- C#开发终端式短信的原理和方法之实践篇
- 十个必备的.NET开发小工具(9 & 10):版本切换和转换工具
- 第4代白盒测试方法实践之“内存泄露检查工具VLD如何与VcTester配合使用”
- jstring 和char* 之间的转换方法