C ++ STD :: string to JString具有固定长度

 2023-01-19    343  

问题描述

我正在尝试将C ++ STD ::字符串变成JSTRING并将其返回.对于

,这将非常容易

C ++ STD :: string to 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/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。