jni java String 转C char*工具类
2015-07-07 11:35
274 查看
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); //
String .getByte("GB2312");
jsize alen =
(*env)->GetArrayLength(env,barr);
jbyte* ba =
(*env)->GetByteArrayElements(env,barr,JNI_FALSE);
if(alen > 0)
{
rtn =
(char*)malloc(alen+1);
//"\0"
memcpy(rtn,ba,alen);
rtn[alen]=0;
}
(*env)->ReleaseByteArrayElements(env,barr,ba,0);
//
return rtn;
}
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); //
String .getByte("GB2312");
jsize alen =
(*env)->GetArrayLength(env,barr);
jbyte* ba =
(*env)->GetByteArrayElements(env,barr,JNI_FALSE);
if(alen > 0)
{
rtn =
(char*)malloc(alen+1);
//"\0"
memcpy(rtn,ba,alen);
rtn[alen]=0;
}
(*env)->ReleaseByteArrayElements(env,barr,ba,0);
//
return rtn;
}
相关文章推荐
- Java中的匿名内部类总结
- java并发编程-Executor框架
- 关于多线程的讲解详细基于5.0jdk
- eclipse启动不起来org.eclipse.swt…
- java中编写cmd命令并执行
- java.lang.OutOfMemoryError: Java heap space
- Java annotation简介2
- Java编程中“为了性能”需做的26件事…
- maven项目启动时报java.lang.ClassNotFoundException
- eclipse ctl+shift F 失效
- Java Next: Groovy、Scala or Clojure?
- java 中精度受损的一种转换计算方式
- 利用struts的同步令牌机制避免form的重复提交
- springmvc接收和处理json数据
- Spring学习(12)--- @Autowired与@Resource 对比
- Java annotation简介1
- java volatile关键字总结
- JDK并发工具包CompletionService和ExecutorCompletionService的好处和使用场景
- JAVA程序调用PLSQL里边写的小函数
- Spring学习(11)---JSR-250标准注解之 @Resource、@PostConstruct、@PreDestroy