Je suis confronté au même problème que Eduardo (Generate a hash sum for several integers) mais le mien est un peu différent comme dit dans le titre.Générer uint64_t clé de hachage avec plusieurs entiers uint32_t
J'ai quatre entiers 32 bits et j'ai besoin de générer une clé unique 64 bits. Ce que j'ai fait pour l'instant est de générer une concaténation de chaîne des quatre entiers séparés par un '/', puis de générer un CRC avec la chaîne.
char id_s[64];
sprintf(id_s, "%d/%d/%d/%d", a, b, c, d);
uint64_t id = CRC(id_s);
Mais le problème est que je dois le faire plusieurs millions de fois, donc il semble être très consommateur de CPU. Je pensais donc à stocker directement les quatre entiers dans un seul entier.
Cela peut être fait facilement si les quatre entiers où 16bits entiers. Cela pourrait simplement être fait en utilisant l'opérateur de décalage de bits. Avec quatre entiers de 32 bits, je dois mettre 128 bits dans un seul entier de 64 bits.
Est-ce que quelqu'un a une suggestion?
Vous ne pouvez pas créer une clé 64 bits * unique * pour des entiers arbitraires 4 * 32 bits, car cela représente 128 bits de données. Pouvez-vous clarifier exactement ce dont vous avez besoin? – Chowlett
Oui c'est vrai qu'il est impossible de se débarrasser de la collision. Ce dont j'ai besoin est de générer une clé entière avec quatre entiers sans utiliser le calcul sprintf et CRC. Existe-t-il un autre moyen de calculer rapidement cette clé? –