结果把值一传回去,全是乱码。。。然后各种百度各种google,看到那些人说什么jni中的Jstring和c中的char*不能单单靠NewStringUTF来转,结果找到各种转换函数,结果还是一样。#include <stdio.h>
#include <string.h>
#include <openssl/md5.h>
#include <android/log.h>
char* md5(char in[]){
unsigned char out[20];
char temp[20];
char res[120];
size_t n;
int i;
n=strlen((const char*)in);
strcpy(res,"");
MD5(in,n,out);
for(i=0;i<16;i++)
{
sprintf(temp,"%02x",out[i]);
strcat(res,temp);
}
__android_log_write(ANDROID_LOG_INFO, in, res);
return res;
}
结果,我原想避开的内存溢出错误被我完美地遇上,我瞬间虚了,不断地在C和JNI的代码上Log,最后在JNI代码处发现在释放第二个参数的时候(也就是 res ),居然出现了内存泄漏,想了想,应该是我在md5函数中改了这个传入参数而导致的,最后我只能试试在C上使用malloc了,我就这样写char* md5(char in[],char res){
unsigned char out[20];
char temp[20];
size_t n;
int i;
n=strlen((const char*)in);
strcpy(res,"");
MD5(in,n,out);
for(i=0;i<16;i++)
{
sprintf(temp,"%02x",out[i]);
strcat(res,temp);
}
__android_log_write(ANDROID_LOG_INFO, in, res);
return res;
}
char* md5(char in[]){
unsigned char out[20];
char temp[20];
char *res = (char*)malloc(sizeof(char)*120);
size_t n;
int i;
n=strlen((const char*)in);
strcpy(res,"");
MD5(in,n,out);
for(i=0;i<16;i++)
{
sprintf(temp,"%02x",out[i]);
strcat(res,temp);
}
__android_log_write(ANDROID_LOG_INFO, in, res);
return res;
}