2016-07-21 5 views
3

char *をJNIのjcharArrayに変換するにはどうすればよいですか?JNIでchar *をjcharArrayに変換する方法

何のコード私は、// TODOコメントの一部に入れなければならないのですか?

JNIEXPORT jcharArray JNICALL Java_finger_FingerPrintJNI_GetVer(JNIEnv *env, jobject thisObj){ 
    char* version = getText(); // Returns char* data type 
    int version_len = strlen(version); 

    jcharArray j_version_array = env->NewCharArray(version_len + 1); 

    // TODO Convert char* to jcharArray 

    return jcharArray; 
} 

追加========================================== ============================

をGearonが、私は以下のコードを入れたときにエラーが発生し、示唆したように。

jchar* jVersion = (jchar*)version; 
env->SetCharArrayRegion(jcharArray, 0, version_len, jVersion); 

以下はエラーメッセージです。

を使用でき
JNIEnv_::SetCharArrayRegion(jcharArray,jsize,jsize,const jchar *)': cannot convert argument 1 from 'jchar *' to 'jcharArray' 
sample.cpp(26): note: Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast 
+0

アンダーソン、私の更新をしてください確認してください。私はちょうど今、タイプミスをしたことを申し訳なく思っています。 jcharArrayをj_version_arrayに置き換えて、それを割り当てます。 – Gearon

答えて

3

jchar* jVersion = (jchar*)version; 
env->SetCharArrayRegion(j_version_array, 0, version_len, jVersion); 

は、それはあなたを助けることができると思います。ありがとう。コードGearonため

+0

上記のコードはエラーになります。 JNIEnv _ :: SetCharArrayRegion(jcharArray、jsize、jsize、const jchar *) ':引数1を' jchar * 'から' jcharArray 'に変換できません sample.cpp(26):注:指されるタイプは無関係です。 reinterpret_cast、Cスタイルのキャストまたはファンクションスタイルのキャストが必要です – Anderson

+0

上記のコードはコンパイル時にうまく動作します。しかし、JAVAで文字列を取得すると、このようなものが得られます。 "[穩、楺、䙸、䥃、䥟、䵍、㐶、瑳、⁤、㑖、㐮、‰、䥈、匭、䕐、䑅、䰠、䵉、呉、䑅、 " – Anderson

+0

私はそれについてはあまりよく分かりません。しかし、おそらくあなたは両方のJava側とネイティブ側でエンコード規則をチェックすることができます。もう1つの可能性は、バージョンポインタ自体が意味のあるメモリ領域を指していることを確認することです。 – Gearon

3

おかげで私の最終的なコードは、このようなものであるが示唆されました。

jchar* j_version = (jchar*)calloc(sizeof(jchar), version_len); 
for(int i=0; i <= version_len; i++){ 
    j_version[i] = (jchar) version[i]; 
} 

jcharArray j_version_array = env->NewCharArray(version_len + 1); 
env->SetCharArrayRegion(j_version_array, 0, version_len , j_version); 
関連する問題