FNVをPythonでも使えるようにするため、まずは外部関数化しました。
64バイトハッシュ値のフォーマット指定子は%luです。
#include <stdio.h>
#include <stdint.h>
uint32_t fnv_1_hash_32(char *s)
{
unsigned int hash=2166136261U;
while (*s) {
hash*=16777619U;
hash^=*(s++);
}
return hash;
}
uint64_t fnv_1_hash_64(char *s)
{
long unsigned int hash=14695981039346656037U;
while (*s) {
hash*=1099511628211LLU;
hash^=*(s++);
}
return hash;
}
#include <stdio.h>
#include <stdint.h>
#include "fnv_1.c"
int main(void)
{
char *s = "シャフリヤール";
printf("%u\n",fnv_1_hash_32(s));
printf("%lu\n",fnv_1_hash_64(s));
}
--------------------------------------------------
出力
--------------------------------------------------
3687658616
7203286604922561048