首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将jchararray作为参数发送到C函数

如何将jchararray作为参数发送到C函数
EN

Stack Overflow用户
提问于 2017-06-30 13:39:54
回答 1查看 190关注 0票数 0

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

代码语言:javascript
复制
int getData(char data[], const int dataLen, int unit[], const int unitLen) {
...
}

我的JNI包装器看起来像

代码语言:javascript
复制
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方法内部打印时,我看到

代码语言:javascript
复制
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()方法中,如果我在同一集合上迭代,我只能看到一半的数据。

代码语言:javascript
复制
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大一个字节,但我仍然不能理解正确的处理方法。

谢谢

EN

回答 1

Stack Overflow用户

发布于 2017-06-30 16:52:51

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

看一下这个question的公认答案

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44839281

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档