簡體   English   中英

將無符號字符數組轉換為 jstring

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM