Hallo, ich würde gerne folgendes Programm von C zu Java ändern. Jedoch bin ich mir wirklich nicht sicher, ob das so richtig ist:
C:
Java:
Anmerkung:
den binary-Wert von hash um 7 Stellen nach links zu schieben ist das gleiche wie mit 2^7 zu multiplizieren. Addiert man anschließend noch einmal hash, multipliziert man mit 2^7+1, was 129 entspricht. 5381*129=694149
EDIT:
Die Logik war zwar richtig, jedoch zerstört dieses die Dynamik des Programms. Daher ist der richtige Java-Code:
C:
Code:
uint32_t hash(const char *arKey, uint32_t nKeyLength) {
uint32_t hash = 5381;
for (; nKeyLength > 0; nKeyLength -=1) {
hash = ((hash << 7) + hash) ^ *arKey++;
}
return hash;
}
Java:
Code:
public static int HashIt(char[] arKey, int KeyLength) {
int hash = 5381;
int i = 0;
for (;KeyLength > 0; KeyLength -=1) {
hash = (694149)^arKey[i++];
}
return hash;
}
Anmerkung:
den binary-Wert von hash um 7 Stellen nach links zu schieben ist das gleiche wie mit 2^7 zu multiplizieren. Addiert man anschließend noch einmal hash, multipliziert man mit 2^7+1, was 129 entspricht. 5381*129=694149
EDIT:
Die Logik war zwar richtig, jedoch zerstört dieses die Dynamik des Programms. Daher ist der richtige Java-Code:
Code:
public static int HashIt(char[] arKey, int KeyLength) {
int hash = 5381;
int i = 0;
for (;KeyLength > 0; KeyLength -=1) {
hash = ((hash << 7)+hash)^arKey[i++];
}
return hash;
}
Zuletzt bearbeitet: