2023-01-19 343
我正在尝试将C ++ STD ::字符串变成JSTRING并将其返回.对于
,这将非常容易
JNIEnv*->NewStringUTF(stdString.c_str())
,但问题是我要转换的字符串几乎随机散布在其中.这是c_str()的问题,但不是std::string. NewStringUTF只会捕获完整std::string的一部分.有一些希望,因为std::string具有length()函数,它具有完整的长度,忽略了有问题的char* \0字符.
有一个单独的函数 newsTring”> newsTring 在JCHAR*和jsize*中,看起来很有希望,但是我无法将STD :: String正确转换为JCHAR*.我试图使其成为字节数组,但我可能做得不正确.我在将length()给出的INT转换为jsize方面遇到了进一步的问题,这是新闻弦通话所要求的.
我已经使用vector<char> byteArray(stdString.begin(), stdString.end())做了一些工作,但这并没有使我走得太远,这可能是因为那是弄乱了原始字符串.
这是我拥有的基本启动函数,它可以与无效字符的字符串一起工作:
jstring StringToJString(JNIEnv * env, const std::string & nativeString) {
return env->NewStringUTF(nativeString.c_str());
}
作为旁注,此功能正在JNI包装器文件中用于返回对象的std::string.
感谢您提供的任何帮助或信息来源!
我做了自己的解决方案,以获取Redalert的建议.
Java现在期望本机呼叫中的字节[]:
private native byte[] toString(long thiz);
现在,ToString方法在A std::string上称呼此方法:
jbyteArray StringToJByteArray(JNIEnv * env, const std::string &nativeString) {
jbyteArray arr = env->NewByteArray(nativeString.length());
env->SetByteArrayRegion(arr,0,nativeString.length(),(jbyte*)nativeString.c_str());
return arr;
}
和Java级别接收到这样的数据:
byte[] byteArray = toString(mNativeInstance);
String nativeString = "";
try {
nativeString = new String(byteArray, "UTF-8");
} catch (UnsupportedEncodingException e) {
Log.e(TAG, "Couldn't convert the jbyteArray to UTF-8");
e.printStackTrace();
}
以上所述是小编给大家介绍的C ++ STD :: string to JString具有固定长度,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!
原文链接:https://77isp.com/post/25819.html
=========================================
https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。
数据库技术 2022-03-28
网站技术 2022-11-26
网站技术 2023-01-07
网站技术 2022-11-17
Windows相关 2022-02-23
网站技术 2023-01-14
Windows相关 2022-02-16
Windows相关 2022-02-16
Linux相关 2022-02-27
数据库技术 2022-02-20
抠敌 2023年10月23日
嚼餐 2023年10月23日
男忌 2023年10月22日
瓮仆 2023年10月22日
簿偌 2023年10月22日
扫码二维码
获取最新动态