[英]Converting an unsigned char array to jstring
我在嘗試將 unsigned char 數組轉換為 jstring 時遇到問題。
上下文是我正在使用來自 Java 的共享 c 庫。 所以我正在實現一個 JNI c++ 文件。 我從庫中使用的函數返回一個unsigned char* num_carte_transcode
而我在 JNI C++ 文件中實現的函數返回一個 jstring。
所以我需要將 unsigned char 數組轉換為 jstring。
我試過這個簡單的演員return (env)->NewStringUTF((char*) unsigned_char_array);
但是雖然數組應該只包含 20 個字節,但我在 Java 中隨機得到 22 或 23 個字節......(雖然 20 個字節是正確的)
EDIT1:這里有一些更多細節與示例
JNIEXPORT jstring JNICALL Java_com_example_demo_DemoClass_functionToCall
(JNIEnv *env, jobject, ) {
// Here I define an unsigned char array as requested by the library function
unsigned char unsigned_char_array[20];
// The function feeds the array at execution
function_to_call(unsigned_char_array);
// I print out the result for debug purpose
printf("result : %.*s (%ld chars)\n", (int) sizeof unsigned_char_array, unsigned_char_array, (int) sizeof unsigned_char_array);
// I get the result I want, which is like: 92311221679609987114 (20 numbers)
// Now, I need to convert the unsigned char array to jstring to return to Java
return (env)->NewStringUTF((char*) unsigned_char_array);
// Though... On debugging on Java, I get 21 bytes 92311221679609987114 (check the image below)
}
有時我得到 22 個字節,有時是 23 個……盡管預期的結果總是 20 個字節。
傳遞給NewStringUTF
的字符串必須以空值結尾。 但是,您傳遞的字符串不是以空值結尾的,並且看起來在第一個空值之前的字符串末尾有一些垃圾。
我建議創建一個更大的數組,並在最后添加一個空終止符:
JNIEXPORT jstring JNICALL Java_com_example_demo_DemoClass_functionToCall
(JNIEnv *env, jobject recv) {
unsigned char unsigned_char_array[20 + 1]; // + 1 for null terminator
function_to_call(unsigned_char_array);
unsigned_char_array[20] = '\0'; // add null terminator
printf("result : %s (%ld chars)\n", unsigned_char_array, (int) sizeof unsigned_char_array);
return (env)->NewStringUTF((char*) unsigned_char_array); // should work now
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.