{"id":17948617,"url":"https://github.com/aleks-net/fnv1a","last_synced_at":"2025-04-30T16:47:12.617Z","repository":{"id":259303230,"uuid":"877531049","full_name":"aleks-net/fnv1a","owner":"aleks-net","description":"Single header solution to hashing with FNV1a in C/C++","archived":false,"fork":false,"pushed_at":"2024-10-23T20:17:18.000Z","size":5,"stargazers_count":3,"open_issues_count":0,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-30T18:03:17.932Z","etag":null,"topics":["c","compile-time","cpp","fnv","fnv-1a","fnv1a","hash","header-only","multiplatform"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"unlicense","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/aleks-net.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-10-23T20:09:38.000Z","updated_at":"2025-01-30T18:48:46.000Z","dependencies_parsed_at":"2024-10-24T07:53:24.573Z","dependency_job_id":"3f01f6fa-785a-44d6-add1-8e31a88cdd39","html_url":"https://github.com/aleks-net/fnv1a","commit_stats":null,"previous_names":["aleks-net/fnv1a"],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aleks-net%2Ffnv1a","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aleks-net%2Ffnv1a/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aleks-net%2Ffnv1a/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aleks-net%2Ffnv1a/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aleks-net","download_url":"https://codeload.github.com/aleks-net/fnv1a/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251747797,"owners_count":21637404,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["c","compile-time","cpp","fnv","fnv-1a","fnv1a","hash","header-only","multiplatform"],"created_at":"2024-10-29T09:07:47.746Z","updated_at":"2025-04-30T16:47:12.379Z","avatar_url":"https://github.com/aleks-net.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# FNV1a\n\nA simple single header solution to hashing with Fowler-Noll-Vo in C/C++.\n\nAvailable with run-time and compile-time functions.\n\nSupporting platforms such as Windows, macOS, and Linux.\n\n## Usage\n\nJust `#include \"fnv1a32.h\"` or `#include \"fnv1a64.h\"` in your code!\n\n## 32-Bit usage\n\n### fnv1a32\n\n```c\nuint32_t fnv1a32(const char *buf, uint32_t len);\n```\n\n- `buf` - a buffer to UTF-8 C string or data.\n- `len` - the size to hash.\n\nReturns a `uint32_t` fnv1a 32-Bit hash.\n\n### fnv1a32_str\n\n```c\nuint32_t fnv1a32_str(const char* str);\n```\n\n- `str` - a UTF-8 C string.\n\nReturns a `uint32_t` fnv1a 32-Bit hash.\n\n### fnv1a32_str C++ only\n\n```c\nuint32_t fnv1a32_str(const std::string\u0026 str);\n```\n\n- `str` - a UTF-8 C++ string.\n\nReturns a `uint32_t` fnv1a 32-Bit hash.\n\n### FNV1A32 compile-time C++ only\n\n```c\nuint32_t FNV1A32(str);\n```\n\n- `str` - a UTF-8 C/C++ string.\n\nReturns a `uint32_t` fnv1a 32-Bit hash.\n\n## 64-Bit usage\n\n### fnv1a64\n\n```c\nuint64_t fnv1a64(const char *buf, uint32_t len);\n```\n\n- `buf` - a buffer to UTF-8 C string or data.\n- `len` - the size to hash.\n\nReturns a `uint64_t` fnv1a 64-Bit hash.\n\n### fnv1a64_str\n\n```c\nuint64_t fnv1a64_str(const char* str);\n```\n\n- `str` - a UTF-8 C string.\n\nReturns a `uint64_t` fnv1a 64-Bit hash.\n\n### fnv1a64_str C++ only\n\n```c\nuint64_t fnv1a64_str(const std::string\u0026 str);\n```\n\n- `str` - a UTF-8 C++ string.\n\nReturns a `uint64_t` fnv1a 64-Bit hash.\n\n### FNV1A64 compile-time C++ only\n\n```c\nuint64_t FNV1A64(str);\n```\n\n- `str` - a UTF-8 C/C++ string.\n\nReturns a `uint64_t` fnv1a 64-Bit hash.\n\n## Examples\n\n# C\n\n```c\n#include \u003cstdio.h\u003e\n\n#include \"../fnv1a32.h\"\n#include \"../fnv1a64.h\"\n\nint main(int argc, char* argv[]) {\n\tprintf(\"C Example\\n\");\n\n\tprintf(\"fnv1a32_str( \\\"aleks-net\\\" ) returns %08x\\n\", fnv1a32_str(\"aleks-net\"));\n\tprintf(\"fnv1a64_str( \\\"aleks-net\\\" ) returns %016llx\\n\", fnv1a64_str(\"aleks-net\"));\n\n\treturn 0;\n}\n```\n\n# C++\n```c++\n#include \u003ciostream\u003e\n\n#include \"../fnv1a32.h\"\n#include \"../fnv1a64.h\"\n\nint main(int argc, char* argv[]) {\n\tstd::cout \u003c\u003c \"C++ Example\" \u003c\u003c std::endl;\n\n\t// run-time\n\tstd::cout \u003c\u003c \"run-time\" \u003c\u003c std::endl;\n\tstd::cout \u003c\u003c \"fnv1a32_str( \\\"aleks-net\\\" ) returns \" \u003c\u003c std::hex \u003c\u003c fnv1a32_str(\"aleks-net\") \u003c\u003c std::endl;\n\tstd::cout \u003c\u003c \"fnv1a64_str( \\\"aleks-net\\\" ) returns \" \u003c\u003c std::hex \u003c\u003c fnv1a64_str(\"aleks-net\") \u003c\u003c std::endl;\n\n\n\t// compile-time\n\tstd::cout \u003c\u003c \"compile-time\" \u003c\u003c std::endl;\n\tstd::cout \u003c\u003c \"fnv1a32_str( \\\"aleks-net\\\" ) returns \" \u003c\u003c std::hex \u003c\u003c FNV1A32(\"aleks-net\") \u003c\u003c std::endl;\n\tstd::cout \u003c\u003c \"fnv1a64_str( \\\"aleks-net\\\" ) returns \" \u003c\u003c std::hex \u003c\u003c FNV1A64(\"aleks-net\") \u003c\u003c std::endl;\n\n\t// example compile-time use case\n\tuint64_t hash = FNV1A64(\"D\");\n\tswitch (hash) {\n\t\tcase FNV1A64( \"A\"):\n\t\t\tstd::cout \u003c\u003c \"option A\" \u003c\u003c std::endl;\n\t\t\tbreak;\n\n\t\tcase FNV1A64(\"B\"):\n\t\t\tstd::cout \u003c\u003c \"option B\" \u003c\u003c std::endl;\n\t\t\tbreak;\n\n\t\tcase FNV1A64(\"C\"):\n\t\t\tstd::cout \u003c\u003c \"option C\" \u003c\u003c std::endl;\n\t\t\tbreak;\n\n\t\tcase FNV1A64(\"D\"):\n\t\t\tstd::cout \u003c\u003c \"option D\" \u003c\u003c std::endl;\n\t\t\tbreak;\n\n\t\tcase FNV1A64(\"E\"):\n\t\t\tstd::cout \u003c\u003c \"option E\" \u003c\u003c std::endl;\n\t\t\tbreak;\n\t}\n\n\treturn 0;\n}\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faleks-net%2Ffnv1a","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faleks-net%2Ffnv1a","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faleks-net%2Ffnv1a/lists"}