如何将typedef basic_string <char>字符串转换为cpp中的字节数组

时间:2017-07-06 12:03:35

标签: c++ arrays string java-native-interface

我正在尝试使用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中我怎样才能实现它。

1 个答案:

答案 0 :(得分:0)

&#34;输入无效修改后的UTF-8:非法启动字节&#34;:是的,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