- Si vous ne vous souciez vraiment pas de la sécurité
- Si tout ce que vous voulez faire est de «gâcher» un nombre
Alors il y a un un tas de façons très simples de faire cela, voici deux auxquelles je peux penser:
void really_simple_hash (uint16_t x) {SWAP_NIBBLES (FIRST_BYTE (x)); SWAP_NIBBLES (SECOND_BYTE (x)); x ^ = 0xAAAA; return x;}
Sur un PIC18, cela se traduit par du code très simple:
SWAPF x, fSWAPF x + 1, fmovlw 0xAAxorwf x, fxorwf x +1, f
C'est assez léger à seulement 5uS de temps d'exécution sur un PIC18 fonctionnant à 10MIPS. Si cela ne suffit pas, vous pouvez mélanger les bits dans le nombre. Encore une fois, sur un PIC18:
rrcf x, f; Ensuite, nous prenons chaque bit du mot sourcerlcf y + 1, f; et déplacez-le dans l'un des octets de destinationrrcf x + 1, frlcf y, f; Il y a: rrcf x, f; - huit décalages à droite de x, rlcf y + 1, f; - huit décalages à droite de x + 1, rrcf x + 1, f; - huit décalages à gauche de y, rlcf y + 1, f; - huit décalages à gauche de y + 1, rrcf x, frlcf y, f; Vous pouvez les faire dans l'ordre de votre choix: rrcf x + 1, frlcf y, frrcf x, frlcf y + 1, frrcf x, frlcf y, frrcf x, frlcf y, frrcf x, f rlcf y + 1, f rrcf x + 1 , frlcf y, frrcf x, frlcf y + 1, frrcf x + 1, frlcf y + 1, frrcf x, frlcf y, frrcf x + 1, frlcf y, frrcf x, frlcf y + 1, frrcf x, frlcf y, frrcf x, frlcf y, f; Enfin, le résultat est stocké dans y
C'est encore assez léger, avec un temps d'exécution de seulement 37uS pour ce même PIC18.