我正在尝试将C++ std :: string转换为jstring并返回它.这很容易
JNIEnv*->NewStringUTF(stdString.c_str())
Run Code Online (Sandbox Code Playgroud)
但问题是我正在转换的字符串几乎随机散布了空字符.这是一个问题c_str(),但不是std::string.NewStringUTF只会抓住一部分的全部std::string.有一些希望,std::string有一个length()函数,它获取全长,忽略有问题的char*\0字符.
有一个单独的函数NewString,它接受一个jchar*和一个jsize*,所以看起来很有希望,但我无法将std :: string正确转换为jchar*.我试着把它变成一个字节数组,但我可能做得不对.我有进一步的问题转换length()为由jsize 给出的int ,这是NewString调用所需要的.
我做了一些工作vector<char> byteArray(stdString.begin(), stdString.end()),但这并没有让我走得很远,可能是因为这弄乱了原来的字符串.
这是我的基本启动函数,它使用没有空字符的字符串:
jstring StringToJString(JNIEnv * env, const std::string & nativeString) {
return env->NewStringUTF(nativeString.c_str());
}
Run Code Online (Sandbox Code Playgroud)
作为旁注,此函数正在JNI包装器文件中用于返回对象std::string.
感谢您的帮助或信息来源!
CSipSimple在android棒棒糖上抛出异常.
JNI DETECTED ERROR IN APPLICATION,输入无效修改UTF-8:非法启动字节0x8e
在进行voip呼叫时,我在这里向ISipService发送消息只是为了检查呼叫是进行还是断开连接.我在pjSip.getPtr()中获得此异常,该异常位于pjSipService.java类中.在这里,我粘贴我的错误日志.
12-03 17:26:38.625: A/art(11312): art/runtime/check_jni.cc:65] JNI DETECTED ERROR IN APPLICATION: input is not valid Modified UTF-8: illegal start byte 0x8e
12-03 17:26:38.625: A/art(11312): art/runtime/check_jni.cc:65] string: 'OKp.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p'
12-03 17:26:38.625: A/art(11312): art/runtime/check_jni.cc:65] in call to NewStringUTF
12-03 17:26:38.625: A/art(11312): art/runtime/check_jni.cc:65] from java.lang.String org.pjsip.pjsua.pjsuaJNI.pj_str_t_ptr_get(long, org.pjsip.pjsua.pj_str_t)
12-03 17:26:38.625: A/art(11312): art/runtime/check_jni.cc:65] "Thread-1487" prio=5 tid=34 Runnable
12-03 17:26:38.625: A/art(11312): art/runtime/check_jni.cc:65] | group="main" sCount=0 dsCount=0 obj=0x13084400 self=0xafe5fc00
12-03 17:26:38.625: A/art(11312): art/runtime/check_jni.cc:65] | sysTid=11490 nice=0 cgrp=apps sched=0/0 handle=0xafed3a80
12-03 17:26:38.625: A/art(11312): art/runtime/check_jni.cc:65] …Run Code Online (Sandbox Code Playgroud)