Implementations of the Fowler–Noll–Vo hash functions. See Wikipedia for details.
Two variants are implemented, fnv1()
and fnv1a()
, the latter is preferred for slightly better avalance characteristics
s = "string to hash"
fnv1a(UInt32, s) # 0xf474bad3
fnv1a(UInt64, s) # 0xff0f01f28783a2d3
fnv1a(UInt128, s) # 0xe676f50e87fe52607a2c13a4c192bca3
data = [0x0, 0x1, 0x2, 0x3]
fnv1a(UInt32, data) # 0xc3aa51b1
fnv1a(UInt64, data) # 0x4475327f98e05411
fnv1a(UInt128, data) # 0x66ad33ec62757277b806e89d2ca0ff79
data = [0x0, 0x1, 0x2, 0x3]
GC.@preserve data begin
raw = pointer(data)
raw_len = sizeof(data)
fnv1a(UInt32, raw, raw_len) # 0xc3aa51b1
fnv1a(UInt64, raw, raw_len) # 0x4475327f98e05411
fnv1a(UInt128, raw, raw_len) # 0x66ad33ec62757277b806e89d2ca0ff79
end