我有一个以前只有Mac的代码,可以使用std::hash<std::string>
[1]生成校验和。现在,此代码已移植到Windows。当Mac版本使用CLANG时,Windows端口使用GCC g ++编译。可以预期的(std::hash
取决于实现),两个编译器的结果都不同:
# Windows: g++.exe (Rev2, Built by MSYS2 project) 9.2.0
std::hash("hello world"): 5577293430985752569
# Mac: Apple clang version 11.0.3 (clang-1103.0.32.29)
std::hash("hello world"): 12386028635079221413
我如何找出编译器正在使用的算法?
我唯一想到的解决方案是在某些测试字符串上探查所有哈希函数实现,并查看匹配的字符串...
当然,长期的方法是在两个端口中使用相同的加密哈希函数。但是,目前无法重新计算Mac版本到目前为止创建的所有校验和,并且必须通过Windows端口进行验证。
std::hash
用于此任务是一个错误的选择。