2012-04-17 6 views
0

voidデータのハッシュキーを生成する方法を知りたい。(void *)データのハッシュキーを生成する

私はネットワーキングとパケット処理のプロジェクトに取り組んでいます。私はハッシュテーブルを生成する必要があります。パケットヘッダをハッシュする。しかし、私は構造やパケットヘッダーのクラスを知らない。だから、これについての考え方。私はちょうどそれを無効に変換することを考えています。ボイドデータをハッシュしてハッシュキーを生成する。

その他のアイデア。良いロジックが歓迎されます。私はあなたの入力に適していると思う機能を持っていCityHash

+0

これは基本的にはうまくいきません。これをJavaの観点から考えると、hashCodeはequalsと一貫していなければなりません。データについて何も知らない場合、2バイトが等しいかどうかは、バイトごとに比較することを除いてどのようにして知ることができますか?そして、あなたが平等であるかどうかわからない場合は、どのようにハッシュテーブルでそれらを見つけることができますか? – ControlAltDel

+0

ありがとうございました。それは絶対に正しいです。しかし、私は異なって考えています。 void型のデータがあるとします。これをテーブルに保存する必要があります。 –

+1

(a)どれくらいの長さであるかを知っている場合、(b)長さの平等とバイトワイズの平等を2つのブロブの等価性の定義として受け入れたい場合は、データのブロブをハッシュして比較することに問題はありません。問題はかなり簡単ですが、実際にあなたがどこにいるかは言わない*ので、人々が良い答えを提供することは難しいでしょう。 – dmckee

答えて

2

見て、:入力タイプは、単に便宜のためであるとして

// Hash function for a byte array. 
uint64 CityHash64(const char *buf, size_t len); 

は、私の知る限り、文字が使用されて - それはありません例えば、ゼロバイトが見つかった場合に関数がハッシュを停止することを意味するものではありません。

また、128ビット版などもあります。

1

任意のタイプのポインタを受け入れる任意のハッシュ関数を使用できます。ただし、バッファの長さも同じである限りです。ちょうどポインタをキャストして使用してください。ほとんどのハッシュ関数は、char *の入力とsize_tの長さを使用します。

あなたの質問から、あなたはヘッダーの長さを持っていないかもしれません。この長さを持たないとうまくいかないでしょう。

+0

ありがとう...長さの問題は何も私は持っています。多くの機能があります。しかし、私はこれをしたい。 :)。私がやっているのは、char * a =&(char)(void)(ccHrd)です。これは私が間違っていることを知っている。それは私が何をしようとしているのかという意味を伝えます。 –

関連する問題