我正在寫一個簡單的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