- Wenn Sie sich wirklich nicht um die Sicherheit kümmern
- Wenn Sie nur eine Nummer durcheinander bringen möchten
Dann gibt es eine Eine Reihe wirklich einfacher Möglichkeiten, dies zu tun, hier sind zwei, die ich mir vorstellen kann:
void real_simple_hash (uint16_t x) {SWAP_NIBBLES (FIRST_BYTE (x)); SWAP_NIBBLES (SECOND_BYTE (x)); x ^ = 0xAAAA; return x;}
Auf einem PIC18 bedeutet dies einen sehr einfachen Code:
SWAPF x, fSWAPF x + 1, fmovlw 0xAAxorwf x, fxorwf x +1, f
Es ist ziemlich leicht bei nur 5uS Ausführungszeit auf einem PIC18 mit 10MIPS. Wenn das nicht genug ist, können Sie die Bits in der Nummer mischen. Wiederum auf einem PIC18:
rrcf x, f; Dann nehmen wir jedes Bit der Quelle wordrlcf y + 1, f; und verschiebe es in eines der Zielbytesrrcf x + 1, frlcf y, f; Es gibt: rrcf x, f; - acht Rechtsverschiebungen von x, rlcf y + 1, f; - acht Rechtsverschiebungen von x + 1, rrcf x + 1, f; - acht Linksverschiebungen von y, rlcf y + 1, f; - acht Linksverschiebungen von y + 1, rrcf x, frlcf y, f; Sie können sie in beliebiger Reihenfolge ausführen , 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; Schließlich wird das Ergebnis in y
gespeichert. Mit einer Ausführungszeit von nur 37uS für denselben PIC18 ist es immer noch recht leicht.