今天,简单讲讲android的jni如何将java传递的
jbyteArray数组转成C++的char*。
昨天,在网上找了很多资料,最后找到了解决的代码。这里记录一下。
一.直接进行强转。
JNIEXPORT jint JNICALL Java_com_test_test_1Init
(JNIEnv *env, jclass object, jbyteArray szLics)
{
char* szStr= NULL;
szStr= (char*)(*env)->GetByteArrayElements(env, szLics, NULL);
//然后去用szStr吧,就是对jbyteArray szLics的使用
(*env)->ReleaseByteArrayElements(env, szLics, szStr, 0);
}
这个我在代码里使用,发现有问题。但是网上很多人都说了这个代码,所以记录一下。
二.将jbyteArray的数据复制到一个char数组。
JNI jbyteArray转char*
char* ConvertJByteaArrayToChars(JNIEnv *env, jbyteArray bytearray)
{
char *chars = NULL;
jbyte *bytes;
bytes = env->GetByteArrayElements(bytearray, 0);
int chars_len = env->GetArrayLength(bytearray);
chars = new char[chars_len + 1];
memset(chars,0,chars_len + 1);
memcpy(chars, bytes, chars_len);
chars[chars_len] = 0;
env->ReleaseByteArrayElements(bytearray, bytes, 0);
return chars;
}
调用:
{
char *pmsg = ConvertJByteaArrayToChars(env,jmsgversion);
...
delete pmsg;
}
这个代码,我运行没有问题,大家可以使用。
android jni jbyteArray转char*就讲完了。
就这么简单。