Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JNI将无符号字符*转换为jbyteArray,并将jbyteArray返回到java_Java_Android_C_Android Ndk_Java Native Interface - Fatal编程技术网

JNI将无符号字符*转换为jbyteArray,并将jbyteArray返回到java

JNI将无符号字符*转换为jbyteArray,并将jbyteArray返回到java,java,android,c,android-ndk,java-native-interface,Java,Android,C,Android Ndk,Java Native Interface,我使用c获得了一个无符号的char*数据,该数据由AES递减,我想将该数据转换为jbytearyay并返回到java: 代码如下: { unsigned char* token = get_token();//get token from AES decrypt method LOGV("token is:%s",token);//it shows me that string like:"jghgillldjdmdejkgmmjdkf" /** * when i

我使用c获得了一个无符号的char*数据,该数据由AES递减,我想将该数据转换为jbytearyay并返回到java: 代码如下:

{
   unsigned char* token = get_token();//get token from AES decrypt method

   LOGV("token is:%s",token);//it shows me that string like:"jghgillldjdmdejkgmmjdkf"

   /**
    * when i try this line:unsigned char* token = "jghgillldjdmdejkgmmjdkf";i works.
    */

   jclass strClass = (*env)->FindClass(env,"java/lang/String");
   jmethodID ctorID = (*env)->GetMethodID(env,strClass,"<init>", "([BLjava/lang/String;)V");
   jbyteArray bytes = (*env)->NewByteArray(env,strlen(token));
   (*env)->SetByteArrayRegion(env,bytes,0,strlen(token),(jbyte*)token);
   return bytes;
}
但是android设备崩溃了,错误日志是:

03-23 13:15:01.951: A/art(5211): art/runtime/check_jni.cc:65] JNI DETECTED   ERROR IN APPLICATION: input is not valid Modified UTF-8: illegal continuation byte 0x2c
03-23 13:15:01.951: A/art(5211): art/runtime/check_jni.cc:65]     string: 'igkjiekefkdiijikjljmdlf?,x??'
03-23 13:15:01.951: A/art(5211): art/runtime/check_jni.cc:65]     in call to NewStringUTF
03-23 13:15:01.951: A/art(5211): art/runtime/check_jni.cc:65]     from java.lang.String com.asmine.ssonative.SSONative.getToken(java.lang.String, java.lang.String)
03-23 13:15:01.951: A/art(5211): art/runtime/check_jni.cc:65] "Thread-313" prio=5 tid=15 Runnable
03-23 13:15:01.951: A/art(5211): art/runtime/check_jni.cc:65]   | group="main" sCount=0 dsCount=0 obj=0x12ce50a0 self=0xed22a800
03-23 13:15:01.951: A/art(5211): art/runtime/check_jni.cc:65]   | sysTid=5232 nice=0 cgrp=apps sched=0/0 handle=0xf435ab80
03-23 13:15:01.951: A/art(5211): art/runtime/check_jni.cc:65]   | state=R schedstat=( 859393537 12390828 74 ) utm=83 stm=2 core=3 HZ=100
03-23 13:15:01.951: A/art(5211): art/runtime/check_jni.cc:65]   | stack=0xe25fe000-0xe2600000 stackSize=1036KB
03-23 13:15:01.951: A/art(5211): art/runtime/check_jni.cc:65]   | held mutexes= "mutator lock"(shared held)
03-23 13:15:01.951: A/art(5211): art/runtime/check_jni.cc:65]   native: #00 pc 00005ac3  /system/lib/libbacktrace_libc++.so (UnwindCurrent::Unwind(unsigned int, ucontext*)+83)
03-23 13:15:01.951: A/art(5211): art/runtime/check_jni.cc:65]   native: #01 pc 00002e91  /system/lib/libbacktrace_libc++.so (Backtrace::Unwind(unsigned int, ucontext*)+33)
03-23 13:15:01.951: A/art(5211): art/runtime/check_jni.cc:65]   native: #02 pc 003c3f0a  /system/lib/libart.so (art::DumpNativeStack(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, int, char const*, art::mirror::ArtMethod*)+138)
03-23 13:15:01.951: A/art(5211): art/runtime/check_jni.cc:65]   native: #03 pc 0038e85c  /system/lib/libart.so (art::Thread::Dump(std::__1::basic_ostream<char, std::__1::char_traits<char> >&) const+284)
03-23 13:15:01.951: A/art(5211): art/runtime/check_jni.cc:65]   native: #04 pc 0010131b  /system/lib/libart.so (art::JniAbort(char const*, char const*)+1019)
03-23 13:15:01.951: A/art(5211): art/runtime/check_jni.cc:65]   native: #05 pc 00101ecc  /system/lib/libart.so (art::JniAbortF(char const*, char const*, ...)+108)
03-23 13:15:01.951: A/art(5211): art/runtime/check_jni.cc:65]   native: #06 pc 00106b36  /system/lib/libart.so (art::ScopedCheck::Check(bool, char const*, ...) (.constprop.130)+3046)
03-23 13:15:01.951: A/art(5211): art/runtime/check_jni.cc:65]   native: #07 pc 0010cd4d  /system/lib/libart.so (art::CheckJNI::NewStringUTF(_JNIEnv*, char const*)+93)
03-23 13:15:01.951:A/art(5211):art/runtime/check_jni.cc:65]jni在应用程序中检测到错误:输入无效修改的UTF-8:非法延续字节0x2c
03-23 13:15:01.951:A/art(5211):art/runtime/check_jni.cc:65]string:'igkjeekefkdijikjljmdlf?,x??'
03-23 13:15:01.951:A/art(5211):art/runtime/checkjni.cc:65]调用NewStringUTF
03-23 13:15:01.951:A/art(5211):art/runtime/check_jni.cc:65]来自java.lang.String com.asmine.ssointal.ssointal.getToken(java.lang.String,java.lang.String)
03-23 13:15:01.951:A/art(5211):art/runtime/check_jni.cc:65]“Thread-313”prio=5 tid=15 Runnable
03-23 13:15:01.951:A/art(5211):art/runtime/check_jni.cc:65]| group=“main”scont=0 dsCount=0 obj=0x12ce50a0 self=0xed22a800
03-23 13:15:01.951:A/art(5211):art/runtime/check_jni.cc:65]| sysTid=5232 nice=0 cgrp=apps sched=0/0 handle=0xf435ab80
03-23 13:15:01.951:A/art(5211):art/runtime/check_jni.cc:65]| state=R schedstat=(859393537 12390828 74)utm=83 stm=2 core=3 HZ=100
03-23 13:15:01.951:A/art(5211):art/runtime/check_jni.cc:65]| stack=0xe25fe000-0xe2600000 stackSize=1036KB
03-23 13:15:01.951:A/art(5211):art/runtime/check_jni.cc:65]|保持互斥体=“mutator lock”(共享保持)
03-23 13:15:01.951:A/art(5211):art/runtime/check_jni.cc:65]本机:#00 pc 00005ac3/system/lib/libbacktrace_libc++.so(UnwindCurrent::Unwind(unsigned int,ucontext*)+83)
03-23 13:15:01.951:A/art(5211):art/runtime/check_jni.cc:65]本机:#01 pc 00002e91/system/lib/libbacktrace_libc++.so(Backtrace::Unwind(unsigned int,ucontext*)+33)
03-23 13:15:01.951:A/art(5211):art/runtime/check_jni.cc:65]native:#02 pc 003c3f0a/system/lib/libart.so(art::DumpNativeStack(std:u 1::basic_ostream&,int,char const*,art::mirror::ArtMethod*)+138)
03-23 13:15:01.951:A/art(5211):art/runtime/check_jni.cc:65]native:#03 pc 0038e85c/system/lib/libart.so(art::Thread::Dump(std:uu 1::basic_ostream&)const+284)
03-23 13:15:01.951:A/art(5211):art/runtime/check_jni.cc:65]本机:#04 pc 0010131b/system/lib/libart.so(art::jnibort(char const*,char const*)+1019)
03-23 13:15:01.951:A/art(5211):art/runtime/check_jni.cc:65]本机:#05 pc 00101ecc/system/lib/libart.so(art::jnibortf(char const*,char const*,…)+108)
03-23 13:15:01.951:A/art(5211):art/runtime/check_jni.cc:65]本机:#06 pc 00106b36/system/lib/libart.so(art::ScopedCheck::check(bool,char const*,…)(.constprop.130)+3046)
03-23 13:15:01.951:A/art(5211):art/runtime/check_jni.cc:65]本机:#07 pc 0010cd4d/system/lib/libart.so(art::CheckJNI::NewStringUTF(_JNIEnv*,char const*)+93)

如果打印
strlen(令牌)
会得到什么?什么是“无”-空字节数组还是空字节数组?有没有可能strlen(token)==0?另外,发布所有代码。鉴于您对
FindClass()
GetMethodID()
的调用,您可能遗漏了一些失败的地方。注释:我得到strlen(token)的值总是23,它是从用于AES解密的get_token()方法生成的。我从java得到一个空值。我在上面更新了一些错误日志信息。
03-23 13:15:01.951: A/art(5211): art/runtime/check_jni.cc:65] JNI DETECTED   ERROR IN APPLICATION: input is not valid Modified UTF-8: illegal continuation byte 0x2c
03-23 13:15:01.951: A/art(5211): art/runtime/check_jni.cc:65]     string: 'igkjiekefkdiijikjljmdlf?,x??'
03-23 13:15:01.951: A/art(5211): art/runtime/check_jni.cc:65]     in call to NewStringUTF
03-23 13:15:01.951: A/art(5211): art/runtime/check_jni.cc:65]     from java.lang.String com.asmine.ssonative.SSONative.getToken(java.lang.String, java.lang.String)
03-23 13:15:01.951: A/art(5211): art/runtime/check_jni.cc:65] "Thread-313" prio=5 tid=15 Runnable
03-23 13:15:01.951: A/art(5211): art/runtime/check_jni.cc:65]   | group="main" sCount=0 dsCount=0 obj=0x12ce50a0 self=0xed22a800
03-23 13:15:01.951: A/art(5211): art/runtime/check_jni.cc:65]   | sysTid=5232 nice=0 cgrp=apps sched=0/0 handle=0xf435ab80
03-23 13:15:01.951: A/art(5211): art/runtime/check_jni.cc:65]   | state=R schedstat=( 859393537 12390828 74 ) utm=83 stm=2 core=3 HZ=100
03-23 13:15:01.951: A/art(5211): art/runtime/check_jni.cc:65]   | stack=0xe25fe000-0xe2600000 stackSize=1036KB
03-23 13:15:01.951: A/art(5211): art/runtime/check_jni.cc:65]   | held mutexes= "mutator lock"(shared held)
03-23 13:15:01.951: A/art(5211): art/runtime/check_jni.cc:65]   native: #00 pc 00005ac3  /system/lib/libbacktrace_libc++.so (UnwindCurrent::Unwind(unsigned int, ucontext*)+83)
03-23 13:15:01.951: A/art(5211): art/runtime/check_jni.cc:65]   native: #01 pc 00002e91  /system/lib/libbacktrace_libc++.so (Backtrace::Unwind(unsigned int, ucontext*)+33)
03-23 13:15:01.951: A/art(5211): art/runtime/check_jni.cc:65]   native: #02 pc 003c3f0a  /system/lib/libart.so (art::DumpNativeStack(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, int, char const*, art::mirror::ArtMethod*)+138)
03-23 13:15:01.951: A/art(5211): art/runtime/check_jni.cc:65]   native: #03 pc 0038e85c  /system/lib/libart.so (art::Thread::Dump(std::__1::basic_ostream<char, std::__1::char_traits<char> >&) const+284)
03-23 13:15:01.951: A/art(5211): art/runtime/check_jni.cc:65]   native: #04 pc 0010131b  /system/lib/libart.so (art::JniAbort(char const*, char const*)+1019)
03-23 13:15:01.951: A/art(5211): art/runtime/check_jni.cc:65]   native: #05 pc 00101ecc  /system/lib/libart.so (art::JniAbortF(char const*, char const*, ...)+108)
03-23 13:15:01.951: A/art(5211): art/runtime/check_jni.cc:65]   native: #06 pc 00106b36  /system/lib/libart.so (art::ScopedCheck::Check(bool, char const*, ...) (.constprop.130)+3046)
03-23 13:15:01.951: A/art(5211): art/runtime/check_jni.cc:65]   native: #07 pc 0010cd4d  /system/lib/libart.so (art::CheckJNI::NewStringUTF(_JNIEnv*, char const*)+93)