J'ai un byte[]
en Java qui présente sa longueur de 256 octets que je passe à une fonction native de C.octet de passage de problème [] via JNI à C sur Android
Quand j'ai essayé d'obtenir les données sur ce tableau était complètement faux et quand je l'ai imprimé, il ne correspondait pas aux données que j'ai imprimées juste avant de le transmettre à C.
J'ai essayé plusieurs façons d'accéder aux données, y compris à la fois GetByteArrayRegion
et GetByteArrayElements
mais rien ne semble pour me donner les données que j'attends.
Comme j'enquêtait sur ce que j'ai essayé de regarder ce JNI croyait que la longueur de jbyteArray
était avec GetArrayLength
- il a rapporté la longueur 1079142960, bien plus que les 256 octets I expected. De plus la valeur est différente chaque fois que la fonction a été appelée, par exemple une autre fois GetArrayLength
retourné 1079145720.
Voici le code que je utilise pour accéder au tableau:
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);
}
Cela semble assez simple pour que je Je ne suis pas vraiment sûr de ce qui se passe. Le tableau semble bien à partir de Java mais il a été généré en C et il est passé, donc je suppose que quelque chose aurait mal tourné ici que Java ne se soucie pas mais brise le tableau quand il revient à C.
Voici le code J'ai utilisé pour générer le tableau et renvoient la balle à Java:
//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;
Suis-je manque quelque chose?
Merci
A quoi ressemble le code Java? –
Rien d'intéressant ne se passe en Java J'attrape le tableau d'octets d'un objet SharedPreferences puis vérifie les données et la longueur qui paraissent bien, puis le passe à la fonction native –