gpt4 book ai didi

java - 如何将 jchararray 作为参数发送给 C 函数

转载 作者:行者123 更新时间:2023-11-30 16:43:58 26 4
gpt4 key购买 nike

我正在尝试在 Android 应用程序中使用 C 库(预先编写和发布)。我开始围绕这个 C 库编写一个 JNI 包装器。我不知道如何将 jchararray 正确地传递给 C。

int getData(char data[], const int dataLen, int unit[], const int unitLen) {
...
}

我的 JNI 包装器看起来像

Java_eg_test_freqProcessor(JNIEnv *env, jclass type, jcharArray data_,
jintArray unit_) {

jchar *data = (*env)->GetCharArrayElements(env, data_, NULL);
jsize dataLen = (*env)->GetArrayLength(env, data_);
jint *unit = (*env)->GetIntArrayElements(env, unit_, NULL);
jsize unitLen = (*env)->GetArrayLength(env, unit_);

getData(data, dataLen, unit, unitLen);

(*env)->ReleaseCharArrayElements(env, data_, data, 0);
(*env)->ReleaseIntArrayElements(env, unit_, unit, 0);
}

我已经通过在 getData() 方法中打印它们来验证 int[] 是否能够很好地传递到 C 库。但问题在于将 jcharArray data_ 传递给 char data[]

在使用 (*env)->GetArrayLength(env, data_); 获取长度后,我打印出了 data_。当我在 Java_eg_test_freqProcessor 方法中打印时,我看到

06-29 23:05:42.364 12278 12348 V EEG    : {
06-29 23:05:42.364 12278 12348 V EEG : "
06-29 23:05:42.364 12278 12348 V EEG : 0
06-29 23:05:42.364 12278 12348 V EEG : "
06-29 23:05:42.364 12278 12348 V EEG : :
06-29 23:05:42.364 12278 12348 V EEG :
06-29 23:05:42.364 12278 12348 V EEG : 1
06-29 23:05:42.364 12278 12348 V EEG : }

但是在 getData() 方法中,如果我迭代同一个集合,我只能看到一半的数据。

06-29 23:08:07.801 12573 12651 V EEG Inside: 0 : {:
06-29 23:08:07.802 12573 12651 V EEG Inside: 1 :
06-29 23:08:07.802 12573 12651 V EEG Inside: 2 : ":
06-29 23:08:07.802 12573 12651 V EEG Inside: 3 :
06-29 23:08:07.802 12573 12651 V EEG Inside: 4 : 0:
06-29 23:08:07.802 12573 12651 V EEG Inside: 5 :
06-29 23:08:07.802 12573 12651 V EEG Inside: 6 : ":
06-29 23:08:07.802 12573 12651 V EEG Inside: 7 :

该库对我稍后需要访问的data[]执行就地转换。我知道 jcharchar 大一个字节,但我仍然无法理解处理此问题的正确方法。

谢谢

最佳答案

jchar 不是 char,而是 uint16_t(或 unsigned Short)。 Java字符串似乎有UTF-16编码。

看看已接受的答案 question

关于java - 如何将 jchararray 作为参数发送给 C 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44839281/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com