新手求教JNI里的jstring转char问题 财富值84

2016-10-13 11:14发布

  1. Java向JNI里传一个String="1234567890123";

  2. JNI里用的C语言:const char key_string = (env)->GetStringUTFChars(env, jkey, 0);

    **error:****JNI DETECTED ERROR IN APPLICATION: input is not valid Modified UTF-8: illegal continuation byte 0x38**; 

在JNI里直接定义 char *key_string = "1234567890123";就没问题

全部代码如下,网上找的,用来加密的;

jstring   Java_com_itapp_mylibrary_MyLibrary_setAES(JNIEnv *env, jobject thiz, jstring input, jstring jkey) {         //char *key_string = "1234567890123";         const char *key_string = (*env)->GetStringUTFChars(env, jkey, 0);         //(*env)->ReleaseStringUTFChars(env, jkey, key_string);                  const char *str = (*env)->GetStringUTFChars(env, input, NULL);             (*env)->ReleaseStringUTFChars(env, input, str);                  long strLen = ((strlen(str) / 16) * 16) + 16;                                       char *aesEnc = malloc(strLen);         memset(aesEnc, 0, strLen);         AES_set_encrypt_key(key_string, 256, &key);                                             for (i = 0; i < strlen(str); i += 16)AES_encrypt(str + i, aesEnc + i, &key);                  char *basEnc = base64_encode(aesEnc, strlen(aesEnc));                 char len[strLen+2];         sprintf(len,"%d__",strLen);         char *len_str = str_contact(len,basEnc);              char *result = base64_encode(len_str, strlen(len_str));                 return (*env)->NewStringUTF(env, result); }  不懂C语言 看不出哪里的问题 在线求教!   
1条回答

分配空间,把你需要的字符串拷贝到key_string。。

一周热门 更多>