JNI如何把Java字符串转为转换为C中的char*

rtn:字符指针变量,指向一个堆内存空间

clsstring:java.lang.String的字节码

strencode:java字符串,值是GB2312

mid:String的getByte方法,参数是一个字符串

barr:要转换的java字符串的字节数组

alen:barr的长度


ba:barr的首地址

char* Jstring2CStr(JNIEnv* env, jstring jstr) {
	char* rtn = NULL; //原来是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;
}


 

猜你喜欢

转载自blog.csdn.net/m0_38032942/article/details/80836227