Web からダウンロードした画像の画像サムネイル バージョンをキャッシュする単純な C++ クラスを作成しています。そのため、URL 文字列を取り込み、ファイル名として適切な一意の文字列を出力するハッシュ関数を使用したいと考えています。
関数を自分で書き直さずにこれを行う簡単な方法はありますか? 簡単なライブラリを探しましたが、何も見つかりませんでした。確かにこれはよくある問題です。
同様の状況で、キーのバイトを 16 進数でエンコードしました (この場合、キーは URL のハッシュです)。これはサイズを 2 倍にしますが、単純で、ファイルシステムが文字をマングリングする問題を回避し、元のキーと同じ順序でソートします。
(最初は、問題のある文字をエスケープすると思っていた、もう少し洗練された、より効率的なエンコーディングを試しましたが、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
ですか?