Fórmula / patrón para proporcionar una única int de 32 bits que representa una ruta de archivo de 512 caracteres?

StackOverflow https://stackoverflow.com/questions/1521491

Pregunta

¿Hay una fórmula común que podría proporcionar un valor único para una ruta de archivo de 512 caracteres, suponiendo un 32 bytes bits por carácter, y posiblemente limitar los caracteres utilizados en los nombres?

Sé que si usted acaba de usar letras mayúsculas solo la combinación sería enormemente más que un int de 32 bits, pero ¿qué pasa con el uso de un campo de identidad con alguna biblioteca para que los números una vez asignados son siempre la misma teniendo en cuenta que la ruta del archivo? Esa es una idea, pero estoy en busca de una fórmula estándar por ahí, o al menos que alguien tuvo éxito su aplicación en el mundo real.

Por cierto, estoy usando C #, pero cualquier idioma gustaría trabajar como un ejemplo, o un enlace a un sitio web.

Gracias

¿Fue útil?

Solución

Puede utilizar String.GetHashCode (). Será, por supuesto, no ser único, pero dos cadenas iguales tendrá el mismo valor hash.

Verificar este enlace para un ejemplo de la búsqueda de colisiones hash cuando utilizando GetHashCode ().

Otros consejos

¿Un código hash de la ruta del archivo sea lo suficientemente único?

MSDN: Object.GetHashCode ()

Incluso si utiliza 1 bit por carácter, el resultado será 512 bits, que es más de 32 lo que significa que en algunos casos dos caminos diferentes generarán el mismo valor. Si el conjunto de datos es "todo camino de 512 caracteres" lo único que puede hacer es buscar una función hash con baja probabilidad de conflictos en un subconjunto particular de ruta.

Si puede representar una cadena de 512 bytes con un número de 32 bits, lo único que puedo decir es, Lo que un buen método de compresión!

Sé que dijo int, pero si usted puede tomar cadena, puede utilizar MD5 y conseguiré un valor único para cada ruta. Más allá de eso, lo único que puedo pensar es asignar un número arbitrario para cada uno por incrementación. Eso no le conseguirá un hash real, aunque, al igual que un identificador de ruta ...

Por lo tanto, en otras palabras, usted está buscando una aplicación .NET CRC32 que devuelve su resultado como un UInt32 en lugar de una cadena de 8 caracteres?

Por desgracia, todas las que he visto devuelven un conjunto de bytes, incluyendo éste .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top