JNI里面处理 C和java字符串互相转换
来源:互联网 发布:win7端口在哪里打开 编辑:程序博客网 时间:2024/05/18 15:30
/* 将 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);}
阅读全文
0 0
- JNI里面处理 C和java字符串互相转换
- c++-字符串和数字互相转换小结
- JAVA 整型和字符串互相转换
- C 和 JAVA 中字符串和int等其他类型互相转换
- Android JNI之Java和C互相调用
- JNI学习(一)(c和java层对象互相调用)
- jni和java之间字符串的转换
- java将字符串和字符串数组互相转换方法
- 字符串和unicode互相转换
- java实现图片和字符串互相转换的代码
- Java中文字符串(String)和ASCII码互相转换
- json字符串和java对象的互相转换
- java中字符串和其他类型之间的互相转换
- Jsonlib实现Json字符串和Java对象的互相转换
- JAXB实现JAVA对象和XML字符串的互相转换
- JAVA 数值和字符串之间的互相转换
- Java对象和JSON字符串的互相转换
- Java中字符串和byte数组互相转换
- JS调试的一些小技巧
- hdu-1372 Knight Moves
- HTTP中get和post的区别
- 面向对象
- 二叉树遍历非递归实现
- JNI里面处理 C和java字符串互相转换
- Libevent源码分析-----event_io_map哈希表
- 算法细节系列(30):接口设计
- date.format,日期格式化
- Spring框架IOC容器和AOP解析
- ANT-Jmeter生成测试报告
- 路由器和交换机的区别 一般都说路由
- window操作系统下有关与使用cmd命令编译运行java文件输出中文乱码问题
- Android学习之Intent使用