8 位处理器上 8 / 16 位 "graphics" 的哈希函数

Hash function for 8 / 16 bit "graphics" on 8 bit processor

用于相干噪声的实现(类似于Perlin noise), I'm looking for a hash function适用于图形。

我不需要它以任何方式进行加密,实际上,我什至不需要它成为超级出色的哈希。

我只想合并两个 16 位数字并输出一个 8 位散列。尽可能随机是好的,而且,在 AVR 处理器(8 位,Arduino 使用的)上快速也是好的。

目前我正在使用一个实现 here:

const uint32_t hash(uint32_t a)
{
    a -= (a<<6);
    a ^= (a>>17);
    a -= (a<<9);
    a ^= (a<<4);
    a -= (a<<3);
    a ^= (a<<10);
    a ^= (a>>15);
    return a;
}

但是考虑到我正在截断除 8 位之外的所有内容,而且我不需要任何特别的东西,我可以使用更少的指令来解决问题吗?

lib8tion library that's packaged with FastLED 启发了我进行这次搜索。它具有特定的功能,例如,在尽可能少的时钟周期内将两个 uint8_t 数相乘得到一个 uint16_t 数。

查看 Pearson hashing:

unsigned char hash(unsigned short a, unsigned short b) {
    static const unsigned char t[256] = {...};
    return t[t[t[t[a & 0xFF] ^ (b & 0xFF)] ^ (a >> 8)] ^ (b >> 8)];
}