如何在j中将jcharArray转换为char []

时间:2016-08-10 20:10:18

标签: java c java-native-interface ffi

我有一个public Type GetItemType() { CollectionView items = DataGrid.Items; Type itemType = items.GetType // ...; return itemType; } 通过Java传递到C程序,我需要知道如何在C程序中使用该数组。如何将jcharArray位转换为可以使用的内容(jcharArray)?

我尝试使用JNI编写此代码

char bits[]

但它无法编译,说:

JNIEXPORT jint JNICALL Java_ex_NistStatisticalTestSuite_frequency
  (JNIEnv *env, jclass cls, jcharArray bits, jint jn)
{

    printf("running frequency test");

    int     i;
    double  f, s_obs, p_value, sum, sqrt2 = 1.41421356237309504880;
    int n=jn;
    char deletethis=(char)bits[0];
    sum = 0.0;
    for ( i=0; i<n; i++ )
        sum += 2*1-1;
    s_obs = fabs(sum)/sqrt(n);
    f = s_obs/sqrt2;
    p_value = erfc(f);

    return (jint)p_value;

}

1 个答案:

答案 0 :(得分:5)

您必须使用jni函数,至少有两种方法:

复制某个地区:

jchar buf[10]; 
(*env)->GetCharArrayRegion(env, bits, 0, 10, buf); 

在JVM中锁定内存区域,然后访问它并最终释放:

jchar *carr; 
carr = (*env)->GetCharArrayElements(env, bits, NULL); 
if (carr == NULL) {
    return 0; /* exception occurred */ 
} 
//for (int i=0; i<10; i++) {
//    do something with carr[i]; 
//} 
(*env)->ReleaseCharArrayElements(env, bits, carr, 0); 

这里我假设你的数组长度为10个元素。要找出数组中的元素数量,请使用GetArrayLength jni函数。