我正在写一个简单的C++类,我希望缓存从网站下载的图片缩略图版本。因此,我想使用一个哈希函数,它接收URL字符串并输出适合作为文件名的唯一字符串。将URL编码为安全的文件名字符串
有没有简单的方法来做到这一点,而不用自己重写函数?我搜索了一个简单的图书馆,但找不到任何东西。这当然是一个普遍的问题。
我正在写一个简单的C++类,我希望缓存从网站下载的图片缩略图版本。因此,我想使用一个哈希函数,它接收URL字符串并输出适合作为文件名的唯一字符串。将URL编码为安全的文件名字符串
有没有简单的方法来做到这一点,而不用自己重写函数?我搜索了一个简单的图书馆,但找不到任何东西。这当然是一个普遍的问题。
更简单的方法是用下划线替换不是字符或数字的所有内容。
编辑:这是在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] = '_';
}
}
这似乎太可能导致碰撞。 – erickson 2008-11-03 23:27:23
什么boost::hash
?
在类似的情况下,我用十六进制编码密钥的字节(在你的情况下,密钥是URL的哈希值)。这会使尺寸加倍,但很简单,避免文件系统出现任何可能的问题,并且会按照与原始密钥相同的顺序进行排序。
(本来我想稍微发烧友,更有效的编码,而且我认为他逃脱了任何问题的字符,但OS X的文件系统被证明是比我设想疯狂。)
感谢您的答复。为了简单起见,我想我会坚持使用“下划线”方法。 – 2008-11-03 23:43:13