पर सेल्सियस के लिए JNI के माध्यम से मैं जावा में एक byte[]
जो 256 बाइट्स जो मैं सीसमस्या गुजर बाइट [] एंड्रॉयड
में एक देशी कार्य करने के लिए पारित जब मैं से बाहर डेटा प्राप्त करने की कोशिश के रूप में अपनी लंबाई की रिपोर्ट है इस सरणी यह पूरी तरह से गलत था और जब मैं इसे बाहर मुद्रित यह डेटा मैं बाहर मुद्रित सही इससे पहले कि मैं यह सी
के लिए पारितमैं दोनों GetByteArrayRegion
और GetByteArrayElements
लेकिन कुछ नहीं लगता सहित डेटा का उपयोग करने के लिए कुछ तरीके की कोशिश की से मेल नहीं खाती मुझे वह डेटा देने के लिए जो मुझे उम्मीद है।
जैसा कि मैंने जांच कर रहा था कि मैं क्या इस JNI jbyteArray
की लंबाई का मानना था पर देखने की कोशिश की GetArrayLength
के साथ था - यह १०७९१४२९६० के रूप में लंबाई, अब तक 256 बाइट्स मैं अपेक्षा से अधिक की सूचना दी। इसके अलावा मूल्य अलग अलग हर बार समारोह बुलाया गया था था, उदाहरण के लिए एक और समय GetArrayLength
लौटे 1079145720.
यहाँ कोड मैं सरणी तक पहुँचने के लिए उपयोग कर रहा हूँ है:
JNIEXPORT jbyteArray function(JNIEnv* env, jbyteArray array) {
int length = (*env)->GetArrayLength(env, array);
jbyte data[256];
(*env)->GetByteArrayRegion(env, array, 0, 256, data);
//also tried
//jbyte *data = (jbyte*) (*env)->GetByteArrayElements(env, array, NULL);
}
यह सुंदर सीधे आगे लगता है तो मैं मुझे यकीन नहीं है कि क्या हो रहा है। सरणी जावा से ठीक प्रतीत होती है लेकिन इसे सी में उत्पन्न किया गया था और मुझे वापस भेज दिया गया था, इसलिए मुझे लगता है कि कुछ गलत हो सकता है, जहां जावा परवाह नहीं है, लेकिन जब यह वापस आता है तो सरणी तोड़ता है।
यहां कोड है मैं सरणी उत्पन्न करता था और इसे जावा पर वापस भेजता था:
//there is some openSSL stuff here that sets up a pointer to an RSA struct called keys that is size bytes large
jbyteArray result = (*env)->NewByteArray(env, size);
(*env)->SetByteArrayRegion(env, result, 0, size, (jbyte*)keys;
क्या मुझे कुछ याद आ रहा है?
धन्यवाद
जावा कोड कैसा दिखता है? –
जावा में कुछ भी दिलचस्प नहीं होता है मैं साझा किए गए ऑब्जेक्ट ऑब्जेक्ट से बाइट सरणी लेता हूं और फिर डेटा और लम्बाई की जांच करता हूं जो दोनों ठीक दिखते हैं और फिर इसे देशी फ़ंक्शन –