JNIJNA 中如何从CC++C# 转换位java的String,持续更新

JNIJNA 中如何从CC++C# 转换位java的String,持续更新,第1张

在写JNI的过程中,因为调用的是 *** 作系统的api,导致所使用的类型并不是基本类型,windows定义了大类的类型,比如WCAHR啥的,每次调api用到类型就感觉头疼,因为我希望是通过java调用C,那么最终肯定是要转换为java的对象。

在写代码的过程中,为了方便做类型转换,我一般都是将字符串相关类型的数据转CString,然后CStringjstring

下面把我遇到的情形都列下来

场景一、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* 的我们能处理
}

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/713660.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-24
下一篇 2022-04-24

发表评论

登录后才能评论

评论列表(0条)

保存