我正在编写一个简单的 C++ 类,我想在其中缓存从网络下载的图像的图片缩略图版本。因此,我想使用一个哈希函数,它接收 URL 字符串并输出一个适合作为文件名的唯一字符串。
有没有一种简单的方法可以做到这一点而无需自己重新编写函数?我四处寻找一个简单的图书馆,但找不到任何东西。当然,这是一个普遍的问题。
在类似的情况下,我将密钥的字节编码为十六进制(在您的情况下,密钥是 URL 的哈希)。这使大小翻了一番,但很简单,避免了文件系统破坏字符时可能出现的任何问题,并且按照与原始键相同的顺序进行排序。
(最初我尝试了一种稍微花哨、更有效的编码,我认为它可以避免任何有问题的字符,但 OS X 的文件系统结果比我想象的还要疯狂。)
一种更简单的方法是用下划线替换不是字符或数字的所有内容。
编辑:这是 C 中的一个幼稚实现:
#include <cctype>
char *safe_url(const char *str) {
char *safe = strdup(str);
for (int i = 0; i < strlen(str); i++) {
if (isalpha(str[i]))
safe[i] = str[i];
else
safe[i] = '_';
}
}
怎么样boost::hash
?