我正在尝试使用JNI将cpp字符串传递给java android。
void Endpoint::utilLogWrite(int prmLevel,
const string &prmSender,
const string &prmMsg)
所以当我使用JNI从java读取prmMsg时,我得到了异常。 将cpp字符串转换为java String时发生以下异常。
应用程序中的JNI检测错误
我无法控制JNIMethod。所以搜索stackoverflow告诉而不是发送cpp字符串更喜欢发送字节数组。
变量prmMsg的类型为 typedef basic_string 所以如何将这个typedef basic_string字符串转换为字节数组。在java中我们有简单的方法
String.toBytes()
。但是在CPP中我怎样才能实现它。
答案 0 :(得分:0)
"输入无效修改后的UTF-8:非法启动字节":是的,UTF-8与修改后的UTF-8不同,后者是JNI提供的拐杖[和,在某些地方(类路径和成员名称等),要求]。所以,我喜欢你使用Java进行任何字符编码转换的方法。
要创建字节数组,请调用NewByteArray
。要填写它,请致电SetByteArrayRegion
。要从std :: string中获取jbytes,请调用data
并强制转换。
std::string s = "\xF0\x9F\x9A\xB2";
// jbyte and char are the same size
const auto output = env->NewByteArray(s.length());
env->SetByteArrayRegion(output, 0, s.length(), reinterpret_cast<const jbyte *>(s.data()));
return output; // return or release output