JNI if abfrage gibt immer false zurück.

RedFox

Mitglied
Abend,

ich will mit JNI nen MD5 Hash vergleichen, aber obwohl die Hashes übereinstimmen gibt er nicht true zurück.

Java:
JNIEXPORT jboolean JNICALL Java_Identify_callIdent(JNIEnv *env, jobject obj, jstring hash) {
	bool isTrue = false;
	if(env->GetStringUTFChars(hash, false) == "98f6bcd4621d373cade4e832627b4f6") {
		isTrue = true;
	}
	return isTrue;
}

Der Code Funktioniert wunderbar bis halt das er immer false zurück gibt...
Ist vielleicht der String falsch das der das nicht erkennt oder so?
Einer ne Idee?
 
Zuletzt bearbeitet:
Auch bei C gilt, dass man Strings nicht einfach mit == vergleichen kann - außer 'string's bei C++. Bei GetStringUTFChars kriegt man ein jbyte-Array zurück. Das muss man entweder in einen char* umwandeln und dann mit strncmp vergleichen, oder in einen 'string' und dann mit ==.
 
Tag,

Auch bei C gilt, dass man Strings nicht einfach mit == vergleichen kann - außer 'string's bei C++. [...]

Konnte ich mir schon fast denken.

[...] Bei GetStringUTFChars kriegt man ein jbyte-Array zurück. Das muss man entweder in einen char* umwandeln und dann mit strncmp vergleichen, oder in einen 'string' und dann mit ==.

Habs jetzt rausgefunden, wenn ich
Java:
(*env)->GetStringUTFChars(env, hash, NULL);
benutzen würde (C) dann würde ein jbyteArray raus kommen.

Ich benutze aber:
Java:
env->GetStringUTFChars(hash, false);
(C++) und das gibt einen char * raus, aber dadurch hab ich die lösung gefunden.

Danke an alle 😉

Fals einer die lösung sehen will:
Java:
JNIEXPORT jboolean JNICALL Java_bluewall_kernel_Identify_callIdent(JNIEnv *env, jobject obj, jstring hash) {
	bool isTrue = false;

	std::string hashString = env->GetStringUTFChars(hash, false);
	if(hashString == "98f6bcd4621d373cade4e832627b4f6") {
		isTrue = true;
	}
	return isTrue;
}
(Fals da iwas nicht passt, bitte bescheit sagen.)

Und nicht vergessen string zu includeren 😉
 
Code:
bool foo() {
  bool isTrue = false
  if (x == y) isTrue = true
  return isTrue
}

==>

bool foo() {
  return x == y
}
Sieht IMHO schöner aus und ist einfacher zu lesen.
 

Neue Themen


Zurück
Oben