JNI 接口 C 怎么传回给Java一个Byte数组呀? 返回值是一个ByteArray数组,我该如何在C中返回呀?char myarray[200];JNIEXPORT jbyteArray JNICALL Java_www_seeyon_com_crimsist_crimsistNa_proc4 (JNIEnv *env, jobject obj, jint num){ Read(myarray); //把数据取到数组中,不一定全是可显示字符 //接下来该怎么返回给Java呢?}谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 楼主不见人了????我用到的一个函数,希望对有需要的XDJM有帮助JNIEXPORT jbyteArray JNICALL Java_com_test_encrypt_Encrypt_encryptData (JNIEnv *env, jclass clazz, jbyteArray encByteArr){ jbyte * mybyte =env->GetByteArrayElements(encByteArr,0); char * addChsrc = (char *)mybyte; const char * chSrc =addChsrc; int length = CompStrZero(chSrc); char *chDes = new char[length + 1]; int *chDes_len = new int[length + 1]; int Enreturn = EncryptData (chSrc,chDes,chDes_len); jbyteArray RtnArr = NULL; if (Enreturn == 0){ jsize arrsize = (jsize)length; RtnArr =env->NewByteArray(arrsize); env->SetByteArrayRegion(RtnArr,0,length,(jbyte*)chDes); } env->ReleaseByteArrayElements(encByteArr,mybyte,0); if (chDes){ delete []chDes; chDes = NULL;} if(chDes_len){ delete []chDes_len; chDes_len = NULL;} return RtnArr;}但是,在特定情形下,我用到的时候有点不爽,在java那边明明传了888个字符过来,用这个方法也确实收到了int byteLen = int(env->GetArrayLength(decByteArr));但是,用这个 cout << "This is the SRC from java: " << mybyte << "\n";打印时,才得1/4的长度 进度动画显示的问题,不懂求教 公司要求以最短代码解决下面问题,晕死。。。 Java引入Rome库有关 如何在菜单栏里加右键菜单???? Java中的if/else用法 如何在一段混有html和asp的代码中把asp分离出来啊 在线等急 答案正确马上给分 关于编码的方法的问题 在线等 原来用jdbc访问mysql实现的程序,现在改用sybase数据库,源程序需要多大变动?——谢谢! 如何获取客户机的JRE版本? jTable某格指定颜色的问题 关于try,catch有一点不明 在线等待,一个日期格式的奇怪错误
我用到的一个函数,希望对有需要的XDJM有帮助
JNIEXPORT jbyteArray JNICALL Java_com_test_encrypt_Encrypt_encryptData
(JNIEnv *env, jclass clazz, jbyteArray encByteArr)
{
jbyte * mybyte =env->GetByteArrayElements(encByteArr,0);
char * addChsrc = (char *)mybyte; const char * chSrc =addChsrc;
int length = CompStrZero(chSrc);
char *chDes = new char[length + 1];
int *chDes_len = new int[length + 1]; int Enreturn = EncryptData (chSrc,chDes,chDes_len); jbyteArray RtnArr = NULL;
if (Enreturn == 0){ jsize arrsize = (jsize)length; RtnArr =env->NewByteArray(arrsize);
env->SetByteArrayRegion(RtnArr,0,length,(jbyte*)chDes);
}
env->ReleaseByteArrayElements(encByteArr,mybyte,0);
if (chDes){
delete []chDes;
chDes = NULL;}
if(chDes_len){
delete []chDes_len;
chDes_len = NULL;} return RtnArr;
}
但是,在特定情形下,我用到的时候有点不爽,在java那边明明传了888个字符过来,用这个方法也确实收到了int byteLen = int(env->GetArrayLength(decByteArr));但是,用这个 cout << "This is the SRC from java: "
<< mybyte
<< "\n";
打印时,才得1/4的长度