二进制数据的哈希函数

问题描述 投票:0回答:1

这种二进制数据的哈希函数实现可以吗?它旨在由满足 Hash 要求的具体对象使用,即从 Hash::operator 内部调用。

size_t hash_binary_buffer(const void* data, size_t count) {
    std::string_view sv{(const char*)data, count};
    return std::hash<std::string_view>(sv);
}

使用此函数的一种方法是将 memcpy 包含对象状态的二进制值放入二进制数组中,然后将该数组传递给上述函数。

c++ c++17
1个回答
0
投票

任何对象都可以被视为字节数组。您不需要为此

memcpy
。请注意,严格别名有相应的例外,这使得这成为可能。当最终你散列一个
void*
数组时,也没有理由绕道
char

话虽这么说,对于给定的对象

obj
,你的函数的作用与:

std::hash<std::string_view>{}( { reinterpret_cast<const char*>(&obj) , sizeof(obj) } );

如果这就是您想要的,那么就“ok”。

© www.soinside.com 2019 - 2024. All rights reserved.