0

512 文字のファイル パスに一意の値を提供できる一般的な式はありますか?1 文字あたり 1 バイトの 32 ビットを想定し、名前に使用される文字を制限する可能性がありますか?

大文字だけを使用した場合、その組み合わせは 32 ビットの int よりも大幅に大きくなることはわかっていますが、ライブラリで ID フィールドを使用して、割り当てられた番号がそのファイル パスで常に同じになるようにするにはどうすればよいでしょうか? それはアイデアですが、私はそこに標準的な公式を探しているか、少なくとも誰かが現実の世界でそれを実装することに成功したことを探しています.

ところで、私は C# を使用していますが、どの言語でも例として機能したり、Web サイトにリンクしたりできます。

ありがとう

4

6 に答える 6

3

ファイル パスのハッシュ コードは十分に一意でしょうか?

MSDN: Object.GetHashCode()

于 2009-10-05T18:04:48.023 に答える
2

String.GetHashCode() を使用できます。もちろん、一意ではありませんが、2 つの等しい文字列は同じハッシュ値になります。

GetHashCode() の使用時にハッシュの衝突を検出する例については、このリンクを確認してください。

于 2009-10-05T18:06:50.780 に答える
1

文字ごとに 1 ビットを使用した場合でも、結果は 512 ビットになり、32 を超えます。つまり、場合によっては、2 つの異なるパスが同じ値を生成することになります。データセットが「すべて 512 文字のパス」である場合、実際にできることは、パスの特定のサブセットで競合の可能性が低いハッシュ関数を探すことだけです。

于 2009-10-05T18:04:57.853 に答える
0

512 バイトの文字列を 32 ビットの数値で表すことができる場合、私が言えることは、なんて素晴らしい圧縮方法でしょう!

于 2009-10-05T18:19:57.103 に答える
0

int と言ったのは知っていますが、文字列を取得できる場合は md5 を使用でき、パスごとに一意の値を取得できます。それを超えて、私が考えることができる唯一のことは、インクリメントによってそれぞれに任意の番号を割り当てることです。ただし、実際のハッシュは得られません。パスIDを作成するだけです...

于 2009-10-05T18:24:45.377 に答える
0

つまり、結果を 8 文字の文字列ではなく UInt32 として返す .NET CRC32 実装を探しているということですか?

残念ながら、私が見たものはすべて、これを含むバイト配列を返します。

于 2009-10-05T18:46:55.880 に答える