Pergunta

Eu estou escrevendo uma classe simples C ++ em que eu gostaria miniaturas de fotografias cache de versões de imagens baixados da web. Como tal, eu gostaria de usar uma função hash que leva em cadeias de URL e gera uma cadeia exclusiva adequado como um nome de arquivo.

Existe uma maneira simples de fazer isso sem re-escrever a função de mim mesmo? Eu procurei em torno de uma biblioteca simples, mas não consegui encontrar nada. Certamente este é um problema comum.

Foi útil?

Solução

Uma abordagem mais simples é substituir tudo o que não é um personagem ou um número com um sublinhado.

EDIT: Aqui está uma implementação simples em 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] = '_';
    }
}

Outras dicas

Em uma situação semelhante I codificado bytes da chave em hexadecimal (onde, no seu caso, a chave é o hash do URL). Isso duplica o tamanho, mas é simples, evita possíveis problemas com seu sistema de arquivos desconfiguração os personagens e tipos na mesma ordem que a chave original.

(Originalmente eu tentei uma codificação um pouco mais sofisticado, mais eficiente, o que achei escapou quaisquer caracteres problemáticos, mas sistema de arquivos do OS X acaba por ser mais louco do que eu assumi.)

E sobre boost::hash ?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top