java - JNI : How to pass "unsigned char* " from C++ to java

标签 java c++ c visual-studio-2005 java-native-interface

我有一个“unsigned char *”,我想使用 JNI 将它传递给 Java 代码 我试过以下方法

jstring test1;  
std::string str(reinterpret_cast<const char*>(ucptest));  
test1 = env->NewStringUTF(str.c_str());

其中 'ucptest' 是 'unsigned char *' 并且其中有 ascii 值。 此代码有效,我可以成功地将 jstring 传递给 Java 代码,但在加载调用中我看到 JVM 崩溃。

崩溃的可能原因是什么?崩溃是不一致,这可能意味着内存损坏。

有人可以建议一种将“unsigned char*”传递给 Java 的更好方法吗?

感谢任何帮助。

谢谢

最佳答案

我找到了解决方案,并认为我会分享相同的解决方案,以便其他人可以使用它。

最初我将 char* 转换为 C++ String,然后将其传递给 Java String。这工作得很好,直到我试图转换的字符串中出现“0”。这导致了崩溃。

最后,我使用字节数组将值传递给服务器。这是完美的工作。

jbyteArray jbArray = env->NewByteArray((int)call.len);
env->SetByteArrayRegion(jbArray, 0, (int)call.len, (jbyte*)call.data);

关于java - JNI : How to pass "unsigned char* " from C++ to java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4716223/

相关文章:

javascript - 使用 Htmlunit WebClient 未完全加载网页的动态内容

java - Java 中的同步 - Vector 与 ArrayList

java - 当hystrix超时时,如何打印所花费的时间?

java - 如何在本地网页(在我的 PC 上)上使用 Selenium WebDriver 而不是位于在线某处的网页?

c - 在 C 中应该返回 0 向控制台打印任何内容吗?

c++ - 因使用双重逻辑非 (!!) 运算符而感到困惑

c++ - 它是安全锁/范围保护实现吗?

c++ - 将 dll 添加到项目并使功能正常工作

带有字符串数组的 C 程序 malloc

检查文件是否存在于 C 中