使用 JNI 将字符串数组从 java 传递到 C

发布于 2024-11-06 19:42:27 字数 190 浏览 1 评论 0原文

我有一个像 {"myname","yourname","hisname"} 这样的字符串数组,我尝试使用 JNI< 将此数组发送到 C /em>。我找不到任何明确的解决方案。我尝试将此字符串作为 chararray 但没有成功。

有办法做到这一点吗?

I have a string array like {"myname","yourname","hisname"} and I am trying to send this array to C with using JNI. I could not find any clear solution for this. I have tried to take this string as a chararray but no success.

Is there a way to do this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

眼中杀气 2024-11-13 19:42:27

您可以编写一个简单的函数,该函数接受一个 jobjectArray 对象,将每个对象强制转换为 jstring,然后对其调用 GetStringUTFChars

像这样:

void MyJNIFunction(JNIEnv *env, jobject object, jobjectArray stringArray) {

    int stringCount = env->GetArrayLength(stringArray);

    for (int i=0; i<stringCount; i++) {
        jstring string = (jstring) (env->GetObjectArrayElement(stringArray, i));
        const char *rawString = env->GetStringUTFChars(string, 0);
        // Don't forget to call `ReleaseStringUTFChars` when you're done.
    }
}

You can write a simple function that takes a jobjectArray object, cast each one to jstring and then call GetStringUTFChars on it.

Like this:

void MyJNIFunction(JNIEnv *env, jobject object, jobjectArray stringArray) {

    int stringCount = env->GetArrayLength(stringArray);

    for (int i=0; i<stringCount; i++) {
        jstring string = (jstring) (env->GetObjectArrayElement(stringArray, i));
        const char *rawString = env->GetStringUTFChars(string, 0);
        // Don't forget to call `ReleaseStringUTFChars` when you're done.
    }
}
一萌ing 2024-11-13 19:42:27

是的,有办法。您可以从 Java 端将 String[] 传递到您的本机方法中,并将其作为 jobjectArray 传递到 C/C++ 端。然后,您可以使用 GetObjectArrayElement() 获取给定索引处的 jstring,然后使用 GetStringUTFChars()GetStringChars()< /code> 获取指向底层字符串数据的 C/C++ 指针。

如果您不了解,JNI 书籍是一个有价值的参考。

Yes, there is a way. You would pass the String[] into your native method from the Java side and that would come across to the C/C++ side as a jobjectArray. You would then use GetObjectArrayElement() to get a jstring at a given index and then use GetStringUTFChars() or GetStringChars() to get a C/C++ pointer to the underlying string data.

And if you don't know about it, the JNI Book is a valuable reference.

梦途 2024-11-13 19:42:27

可以通过以下方式完成:

(JNIEnv *env, jobject object, jobjectArray prdctini)
    {
        const char *param[20];
        jsize stringCount = (*env).GetArrayLength(prdctini);

          for (int i=0; i<stringCount; i++) {
                  jstring string = (jstring) (*env).GetObjectArrayElement( prdctini, i);
                  param[i] = (*env).GetStringUTFChars( string, NULL);
          }
          cout<<"U_Id="<<param[0]<<endl;
          cout<<"aggregation="<<param[1]<<endl
}

it can be done in following way:

(JNIEnv *env, jobject object, jobjectArray prdctini)
    {
        const char *param[20];
        jsize stringCount = (*env).GetArrayLength(prdctini);

          for (int i=0; i<stringCount; i++) {
                  jstring string = (jstring) (*env).GetObjectArrayElement( prdctini, i);
                  param[i] = (*env).GetStringUTFChars( string, NULL);
          }
          cout<<"U_Id="<<param[0]<<endl;
          cout<<"aggregation="<<param[1]<<endl
}
倾城泪 2024-11-13 19:42:27

记得使用

env->GetArrayLength(stringArray);

Remember to use

env->GetArrayLength(stringArray);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文