ndk jstring 与cha*相互转换
2016-03-27 16:57
597 查看
char* Jstring2CStr(JNIEnv* env,jstring jstr)
{
char* rtn = NULL;
jclass clsstring = env->FindClass("java/lang/String");
jstring strencode = env->NewStringUTF("GB2312");//转换成Cstring的GB2312,兼容ISO8859-1
jmethodID mid = env->GetMethodID(clsstring,"getBytes","(Ljava/lang/String;)[B");
jbyteArray barr= (jbyteArray) env->CallObjectMethod(jstr,mid,strencode); //String.getByte("GB2312");
jsize alen = env->GetArrayLength(barr);
jbyte* ba = env->GetByteArrayElements(barr,JNI_FALSE);
if(alen > 0)
{
rtn = (char*)malloc(alen+1);
memcpy(rtn,ba,alen);
rtn[alen]=0; //"\0"
}
env->ReleaseByteArrayElements(barr,ba,0);
return rtn;
}
jstring CStr2Jstring( JNIEnv* env, const char* pat)
{
jclass strClass = env->FindClass("Ljava/lang/String;");
jmethodID mID = env->GetMethodID(strClass, "<init>", "([BLjava/lang/String;)V");
jbyteArray bytes = env->NewByteArray((jsize)strlen(pat));
env->SetByteArrayRegion(bytes, 0, (jsize)strlen(pat), (jbyte*)pat); //将char* 转换为byte数组
jstring encoding = env->NewStringUTF("GB2312");
return (jstring)env->NewObject(strClass, mID, bytes, encoding);
}
{
char* rtn = NULL;
jclass clsstring = env->FindClass("java/lang/String");
jstring strencode = env->NewStringUTF("GB2312");//转换成Cstring的GB2312,兼容ISO8859-1
jmethodID mid = env->GetMethodID(clsstring,"getBytes","(Ljava/lang/String;)[B");
jbyteArray barr= (jbyteArray) env->CallObjectMethod(jstr,mid,strencode); //String.getByte("GB2312");
jsize alen = env->GetArrayLength(barr);
jbyte* ba = env->GetByteArrayElements(barr,JNI_FALSE);
if(alen > 0)
{
rtn = (char*)malloc(alen+1);
memcpy(rtn,ba,alen);
rtn[alen]=0; //"\0"
}
env->ReleaseByteArrayElements(barr,ba,0);
return rtn;
}
jstring CStr2Jstring( JNIEnv* env, const char* pat)
{
jclass strClass = env->FindClass("Ljava/lang/String;");
jmethodID mID = env->GetMethodID(strClass, "<init>", "([BLjava/lang/String;)V");
jbyteArray bytes = env->NewByteArray((jsize)strlen(pat));
env->SetByteArrayRegion(bytes, 0, (jsize)strlen(pat), (jbyte*)pat); //将char* 转换为byte数组
jstring encoding = env->NewStringUTF("GB2312");
return (jstring)env->NewObject(strClass, mID, bytes, encoding);
}
相关文章推荐
- Javascript中匿名函数的多种调用方式
- JavaScript html5 canvas绘制时钟效果(二)
- javascript-js中技巧集合
- 修改Myecclipse servlet/jsp的默认模板
- js史上最简单的数组合并去重排序
- javascript中希望定义一个页面刷新也不能改变其值的方法
- 分享一个 原生javaScript - 用面向对象写的下拉菜单 - DropdownMenu
- js实现复制到粘贴板 ZeroClipboard
- 使用Google的Gson实现对象和json字符串之间的转换
- ASP.NET-js和C#混合编程的例子
- JavaScript
- JavaScript排序算法之归并排序
- javascript-知识点集合
- 详解Javascript的继承实现(二)
- 22、Ext.util.JSON.decode 的用法?
- 关于jsp页面page指令中errorpage和iserrorpage属性
- JavaScript提交表单时检查所填是否有效
- Echarts.js遇见的问题(tooltip)
- javascript 收藏本站的代码
- Javascript闭包——懂不懂由你,反正我是懂了