2016-08-10 15 views
-3

私はjcharArrayをJavaからCプログラムに渡していますが、Cプログラムでその配列を使用する方法を知る必要があります。 jcharArrayビットを私が使用できるもの(char bits[])に変換するにはどうすればよいですか?jcharArrayをCのchar []に変換する方法

私はJNI

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; 

} 

を使用してこのコードを書いてみましたが、それはコンパイルに失敗し、言って:

frequency.c:19:2: error: invalid use of undefined type ‘struct _jobject’ 
    char deletethis=(char)bits[0]; 
    ^~~~ 
frequency.c:19:28: error: dereferencing pointer to incomplete type ‘struct _jobject’ 
    char deletethis=(char)bits[0]; 
+1

コードを教えてください。何を試しましたか?結果は何でしたか?コンパイルエラーが出ていますか?データは正しく転送されませんか? –

+1

あなたの研究/デバッグの努力をこれまでのところ表示してください。まず[Ask]ページをお読みください。 –

答えて

4

あなたはJNI関数を使用する必要があり、少なくとも2つの方法があります。

地域をコピー:

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関数を使用します。

関連する問題