【发布时间】:2017-07-06 12:03:35
【问题描述】:
我正在尝试使用 JNI 将 cpp 字符串传递给 java android。
void Endpoint::utilLogWrite(int prmLevel,
const string &prmSender,
const string &prmMsg)
所以当我使用 JNI 从 java 读取 prmMsg 时,我得到了异常。 将该 cpp 字符串转换为 java 字符串时发生以下异常。
JNI 检测到应用程序错误
我无法控制 JNIMethods.so 搜索 stackoverflow 告诉而不是发送 cpp 字符串更喜欢发送字节数组。
变量 prmMsg 的类型是 typedef basic_string 那么如何将此typedef basic_string字符串转换为字节数组。在java中我们有简单的方法
String.toBytes()
。但是在 CPP 中,我该如何实现呢。
【问题讨论】:
-
出现什么异常?你是如何传递字符串的?
-
“发送”是什么意思?你的意思是函数调用吗?
-
@NathanOliver JNI 在应用程序中检测到错误:输入无效修改的 UTF-8:非法起始字节这是发生的异常
-
@user2079303 不,我已经有一个使用字符串参数的函数,而不是字符串参数,我喜欢将字节数组作为参数
-
目前尚不清楚您正在做什么来获取异常,也不清楚您建议更改什么代码,也不清楚您所说的字节数组是什么意思。您似乎被 3rd-party 代码中的错误阻止:它无法处理 UTF-8 使用 4 个代码单元编码的字符,因为它不恰当地使用需要修改的 UTF-8 编码的 JNI 函数。
标签: c++ arrays string java-native-interface