JNI里面处理 C和java字符串互相转换
2017-06-06 20:56
246 查看
/* 将 String 类型转成 char* */ char* Jstring2CStr(JNIEnv* env, jstring jstr) { char* rtn = NULL; jclass clsstring = (*env)->FindClass(env,"java/lang/String"); jstring strencode = (*env)->NewStringUTF(env,"GB2312"); jmethodID mid = (*env)->GetMethodID(env,clsstring, "getBytes", "(Ljava/lang/String;)[B"); jbyteArray barr= (jbyteArray)(*env)->CallObjectMethod(env,jstr,mid,strencode); jsize alen = (*env)->GetArrayLength(env,barr); jbyte* ba = (*env)->GetByteArrayElements(env,barr,JNI_FALSE); if(alen > 0) { rtn = (char*)malloc(alen+1); //new char[alen+1]; memcpy(rtn,ba,alen); rtn[alen]=0; } (*env)->ReleaseByteArrayElements(env,barr,ba,0); return rtn; } /** 将char* 转成 其他类型 */ jstring CStr2Jstring( JNIEnv* env, const char* pat ) { //定义java String类 strClass jclass strClass = (*env)->FindClass(env,"Ljava/lang/String;"); //获取java String类方法String(byte[],String)的构造器,用于将本地byte[]数组转换为一个新String jmethodID ctorID = (*env)->GetMethodID(env,strClass, "<init>", "([BLjava/lang/String;)V"); //建立byte数组 jbyteArray bytes = (*env)->NewByteArray(env,(jsize)strlen(pat)); //将char* 转换为byte数组 (*env)->SetByteArrayRegion(env,bytes, 0, (jsize)strlen(pat), (jbyte*)pat); //设置String, 保存语言类型,用于byte数组转换至String时的参数 jstring encoding = (*env)->NewStringUTF(env,"GB2312"); //将byte数组转换为java String,并输出 return (jstring)(*env)->NewObject(env,strClass, ctorID, bytes, encoding); }
相关文章推荐
- java字符串处理类----以后会继续添加方法到里面
- java实现图片和字符串互相转换的代码
- Java字符串与整数之间的互相转换
- json字符串与java对象互相转换
- Java中byte与16进制字符串的互相转换
- Java日期处理——字符串转换为日期时间
- Objective-C NSString字符串处理简单总结 plus 字符串与数值互相转换
- Java字符串与整数之间的互相转换
- XStream:Object与Xml字符串 互相转换 多个同名子节点以及节点属性的处理。
- java 中文和unicode字符串互相转换(文件需要保存为gbk2312或者asci格式)
- java与C#字符串转换成日期处理比较
- javaEE如何处理字符串在java-script-html环境之间的转换使用
- Java中byte与16进制字符串的互相转换
- Java中byte与16进制字符串的互相转换
- [转]Java中byte与16进制字符串的互相转换
- java里面byte数组和String字符串怎么转换
- java实现图片和字符串互相转换的代码
- JNI 中文字符串转换乱码的处理(zz)
- java中字符串编码的转换以及乱码后的处理总结
- jni中字符转换中文乱码的处理方法 Java String转换成const char*(转摘)