2017-03-11 2 views
0

Ich versuche, mit jbyte zu arbeiten, aber Fehler:Wie Wert von jbyte in Array zu setzen

Error:(12, 19) error: no viable overloaded '='. 

Hier ist mein Code:

jint len = env->GetArrayLength(s); 
jbyteArray result = (env)->NewByteArray(len); 
jbyte *element = env->GetByteArrayElements(s,false); 
for (int i=0; i < len; i++) { 
    if(env->ExceptionOccurred()) { 
     break; 
     } 
    result[i] = *(element+i); 
    } 

Was ist los?

Antwort

1

Sie können nicht so in jbyteArray schreiben. Sie müssen GetByteArrayElements verwenden, um einen Zeiger auf das zugrunde liegende Array zu erhalten. Und dann verwenden Sie ReleaseByteArrayElements, wenn Sie mit diesem Array fertig sind.

jbyte *result_bytes = env->GetByteArrayElements(result, NULL); 
.... 
result_bytes[i] = *(element+i); 
... 
// 0 = copy back the modified data if necessary 
env->ReleaseByteArrayElements(result, result_bytes, 0); 

Siehe http://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/functions.html


By the way: das zweite Argument zu GetByteArrayElements ist ein jboolean*, so sollte GetByteArrayElements(s,false)GetByteArrayElements(s, NULL) sein.
Und Sie müssen ReleaseByteArrayElements aufrufen, wenn Sie fertig sind mit element.

+0

Vielen Dank, aber ich kann NULL nicht verwenden (es ist nicht erklärt) –

+1

sind dann die notwendigen Header (wahrscheinlich 'cstddef'). – Michael

Verwandte Themen