急 等各位大哥救命 求教jni的问题(100分)

  • 主题发起人 主题发起人 7syw
  • 开始时间 开始时间
7

7syw

Unregistered / Unconfirmed
GUEST, unregistred user!
怎么转换在jni里的
jbyteArray 转到 unsigned char *
jlong 转到 unsigned long *
jshort 转为 unsigned short *
他们之间的相互转换
 
使用类似下面的函数转化,
jstring CharTojstring(JNIEnv* env, char* str) {
jstring rtn = 0;
jsize len = strlen(str);
jclass clsstring = env->FindClass("java/lang/String");
//new encode string default "GBK"
jstring strencode = env->NewStringUTF(CURRENT_ENCODE);
jmethodID mid = env->GetMethodID(clsstring, "<init>", "([BLjava/lang/String;)V");
jbyteArray barr = env->NewByteArray(len);
env->SetByteArrayRegion(barr,0,len,(jbyte*)str);
//call new String(byte[] b,String encode)
rtn = (jstring)env->NewObject(clsstring,mid,barr,strencode);
return rtn;
}
char* jstringToChar(JNIEnv* env, jstring jstr) {
char* rtn = NULL;
jclass clsstring = env->FindClass("java/lang/String");
//new encode string default "GBK"
jstring strencode = env->NewStringUTF(CURRENT_ENCODE);
jmethodID mid = env->GetMethodID(clsstring, "getBytes", "(Ljava/lang/String;)[B");
//call String.getBytes method to avoid incompatible migrating into solaris
jbyteArray barr= (jbyteArray)env->CallObjectMethod(jstr,mid,strencode);
jsize alen = env->GetArrayLength(barr);
jbyte* ba = env->GetByteArrayElements(barr,JNI_FALSE);
if(alen > 0) {
rtn = (char*)malloc(alen+1);
//new char[alen+1];
memcpy(rtn,ba,alen);
rtn[alen]=0;
}
env->ReleaseByteArrayElements(barr,ba,0);
return rtn;
}
 
谢谢 你的提示
 
我需要具体一点的答案呀
 
这个已经够具体了吧!
 
最好有现成的代码
 
算了 还是结帖把
 
还是谢谢大家了
 
后退
顶部