在写JNI的过程中,因为调用的是 *** 作系统的api,导致所使用的类型并不是基本类型,windows定义了大类的类型,比如WCAHR啥的,每次调api用到类型就感觉头疼,因为我希望是通过java调用C,那么最终肯定是要转换为java的对象。
在写代码的过程中,为了方便做类型转换,我一般都是将字符串相关类型的数据转CString
,然后CString
转jstring
。
下面把我遇到的情形都列下来
场景一、WCHAR * 转 jstring如:WCHAR* buffer;
CString cstr = buffer;// 1.直接转CString
int size = WideCharToMultiByte(CP_UTF8, 0, cstr, -1, NULL, 0, NULL, FALSE);
char* str = new char[sizeof(char) * size];// 声明基本类型的字符串
WideCharToMultiByte(CP_UTF8, 0, cstr, -1, str, size, NULL, FALSE);//2.CString转char*
cmd = (jstring)(env)->NewStringUTF(str);// char* 的我们能处理
场景二、CString转jstring
因为要转jstring所以需要用到env,如下
jstring cstring2jstring(JNIEnv* env, CString cstr) {
int size = WideCharToMultiByte(CP_UTF8, 0, cstr, -1, NULL, 0, NULL, FALSE);
char* str = new char[sizeof(char) * size];// 声明基本类型的字符串
WideCharToMultiByte(CP_UTF8, 0, cstr, -1, str, size, NULL, FALSE);//2.CString转char*
return (jstring)(env)->NewStringUTF(str);// char* 的我们能处理
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)