2016-02-24 39 views
0

我想使用JNI對字節或char數組進行XOR運算符。我使用字節或字符數組和密鑰,我必須使用加密或解密的本地方法。對於XOR的單行,我不能在eclipse中建立C文件,因爲「void value不會被忽略,因爲它應該是」。 我加了jchar *xor來解決void錯誤,比我得到一個更多的錯誤「無效使用void表達式」 我無法解決這個問題。這裏是我的c代碼。JNI XOR加密Eclipse構建錯誤

int 
Java_packagename_classname_encryption(JNIEnv* env, jobject obj, 
     jcharArray buffer, jint offset, 
     jint length, jcharArray _key, jint keylength){ 


     jint temp,i ; 
     jint _keyByteIndex = 0; 
     jcharArray xor[length] ; 


     for(i=0; i<length + offset; ++i){ 

      /*char temp = buffer[i]; 
      temp ^= _key[_keyByteIndex]; 
      buffer[i] = (char) temp;*/ 

      buffer[i] = (jchar) (buffer[i]^_key[_keyByteIndex]); 

      if (_keyByteIndex + 1 >=keylength){ 
       _keyByteIndex = 0; 
      }else{ 
       ++_keyByteIndex; 
      } 

     } 

     return 0; 
} 
+0

'jcharArray'不是一個可以直接用'[]'訪問的數組。這是一個'jobject',爲了訪問實際的數組數據,您需要使用適當的[JNI函數](https://docs.oracle.com/javase/8/docs/technotes/guides/jni/spec/functions。 HTML)。 – Michael

+0

@邁克爾謝謝,但你可以請爲我寫單行代碼,所以我可以理解。我研究jni.h,但不能理解完美的語法。 – parthpatibandha

+0

任何人都知道如何在JNI C中捕獲異常本機代碼我嘗試了簡單的嘗試捕獲,但提供了許多錯誤,如:: - '嘗試'未申報(首次在此函數中使用) \t - 每個未聲明的標識符只報告一次它出現的每個功能 \t in \t - 預期';' '{'token \t - 聲明無效'try' \t - 無法解析代碼'try' \t - Missing';' – parthpatibandha

回答

1

jcharArrayjarray一個typedef,這是jobject一個typedef其是用於void*一個typedef。它可能是任何東西,它可能是一個僞裝成無效指針的獨角獸。

您不能對_key[_keyByteIndex]使用解除引用。你必須使用(*env)->GetCharArrayElements,這將返回你想要的:jchar*

我建議你看看你使用的jni.h,它應該給你所有你需要的答案。

+0

感謝您的回覆,請詳細解釋我與我一起嘗試過。我沒有更多的exp.xor [i] =(* env) - > GetCharArrayElements(env,buffer [i]^_key [_keyByteIndex]); (env,buffer [i])^(* env) - > GetCharArrayElements(env,_key [_keyByteIndex]);錯誤:「Method'GetCharArrayElements'無法解析」 – parthpatibandha

+0

檢查您正在使用的'jni.h'是否有正確的方法簽名。 – Leandros