我正在编写一个简单的C ++类,我想在其中缓存从Web下载的图像缩略图版本。因此,我想使用一个哈希函数,它接收URL字符串并输出一个适合作为文件名的唯一字符串。
有没有一种简单的方法可以在不重新编写函数的情况下执行此操作?我四处寻找一个简单的图书馆,却找不到任何东西。当然这是一个普遍的问题。
答案 0 :(得分:3)
在类似的情况下,我用十六进制编码了密钥的字节(在你的情况下,密钥是URL的哈希值)。这个大小加倍但很简单,避免了文件系统损坏字符时出现的任何问题,并按照与原始密钥相同的顺序排序。
(最初我尝试了一种稍微更高效,更有效的编码,我认为它逃脱了任何有问题的字符,但OS X的文件系统比我想象的要疯狂。)
答案 1 :(得分:1)
更简单的方法是用下划线替换不是字符或数字的所有内容。
编辑:这是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] = '_';
}
}
答案 2 :(得分:0)
boost::hash
怎么办?