3

我正在编写一个简单的 C++ 类,我想在其中缓存从网络下载的图像的图片缩略图版本。因此,我想使用一个哈希函数,它接收 URL 字符串并输出一个适合作为文件名的唯一字符串。

有没有一种简单的方法可以做到这一点而无需自己重新编写函数?我四处寻找一个简单的图书馆,但找不到任何东西。当然,这是一个普遍的问题。

4

3 回答 3

3

在类似的情况下,我将密钥的字节编码为十六进制(在您的情况下,密钥是 URL 的哈希)。这使大小翻了一番,但很简单,避免了文件系统破坏字符时可能出现的任何问题,并且按照与原始键相同的顺序进行排序。

(最初我尝试了一种稍微花哨、更有效的编码,我认为它可以避免任何有问题的字符,但 OS X 的文件系统结果比我想象的还要疯狂。)

于 2008-11-03T23:22:17.880 回答
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] = '_';
    }
}
于 2008-11-03T22:57:42.110 回答
0

怎么样boost::hash

于 2008-11-03T23:00:16.240 回答