Hallo,
ich schlage mich schon geraume Zeit mit dem genannten Problem rum. Bei meiner Arbeit muss ich eigentlich nur in JAVA Programmieren und bin daher in C, vor allem mit Pointern, nicht sehr gewandt . Allerdings verwende ich gerade JNI und muss deshalb einige wenige Dinge in C "programmieren". Dabei muss ich eigentlich in C nur fertige Methoden aufrufen und nur die entsprechenden Parameter setzen. Hierzu kommt es bei mir allerdings zu Problemen bei der Umwandlung der übergebenen Parameter.
Folgendes Problem möchte ich gerne lösen:
-Ich übergebe ein JavaByteArray (jByteArray) an die c-Methode
-Anschließend möchte das Byte-Array in einem unsigned char Array abspeichern
Hierzu ein kleines Codebeispiel:
Ich würde mich freuen, wenn mir jemand weiterhelfen kann.
Die Fehlermeldung des Compilers lautet übrigens:
warning: assignment makes integer from pointer without a cast
ANMERKUNG:
Gerade eben hat bei mir folgende Lösung funktioniert:
Das kann man bestimmt auch eleganter lösen? Habe irgendwo gelesen, dass es über GetByteArrayRegion() gehen soll...
Allerdings habe ich immernoch das Problem, dass ich gerne hätte, dass ich dem unsigned char Array sage, dass es nur 64 Byte groß ist. Wie kann ich das bei dem Cast hier gescheit anwenden? Danke im voraus für die Antworten.
ich schlage mich schon geraume Zeit mit dem genannten Problem rum. Bei meiner Arbeit muss ich eigentlich nur in JAVA Programmieren und bin daher in C, vor allem mit Pointern, nicht sehr gewandt . Allerdings verwende ich gerade JNI und muss deshalb einige wenige Dinge in C "programmieren". Dabei muss ich eigentlich in C nur fertige Methoden aufrufen und nur die entsprechenden Parameter setzen. Hierzu kommt es bei mir allerdings zu Problemen bei der Umwandlung der übergebenen Parameter.
Folgendes Problem möchte ich gerne lösen:
-Ich übergebe ein JavaByteArray (jByteArray) an die c-Methode
-Anschließend möchte das Byte-Array in einem unsigned char Array abspeichern
Hierzu ein kleines Codebeispiel:
Code:
JNIEXPORT jbyteArray JNICALL Java_api_SHA1_zSha1
(JNIEnv *env, jobject obj, jbyteArray arr){
unsigned char input_data[1000000];
unsigned char data[64];
int flen;
flen = (*env)->GetArrayLength (env, arr);
//Das Problem liegt hier: Wie muss der Code aussehen, damit ich das jByteArray in data speichere?
*data = (*env)->GetByteArrayElements(env, arr, 0);
memcpy(input_data, data, flen);
Ich würde mich freuen, wenn mir jemand weiterhelfen kann.
Die Fehlermeldung des Compilers lautet übrigens:
warning: assignment makes integer from pointer without a cast
ANMERKUNG:
Gerade eben hat bei mir folgende Lösung funktioniert:
Code:
jbyte *inputBytes;
int flen;
flen = (*env)->GetArrayLength (env, arr);
inputBytes = (*env)->GetByteArrayElements(env, arr, 0);
(*env)->ReleaseByteArrayElements(env, arr, inputBytes, 0);
memcpy(input_data, (unsigned char *) inputBytes, flen);
Das kann man bestimmt auch eleganter lösen? Habe irgendwo gelesen, dass es über GetByteArrayRegion() gehen soll...
Allerdings habe ich immernoch das Problem, dass ich gerne hätte, dass ich dem unsigned char Array sage, dass es nur 64 Byte groß ist. Wie kann ich das bei dem Cast hier gescheit anwenden? Danke im voraus für die Antworten.
Zuletzt bearbeitet: