2012-04-17 63 views
0

我想知道如何生成无效数据的哈希键。生成(void *)数据的哈希键

我正在开展网络和处理数据包的项目。我必须生成哈希表。在哪个包头被散列。但我不知道包头的结构或类。所以,对此有任何想法。我只是想把它变成无效的。并散列无效数据以生成散列键。

任何其他的想法。 GOOD Logic将受到欢迎。

+0

基本上这是行不通的。从Java的角度思考这个问题,hashCode必须与equals保持一致。如果你对数据一无所知,你怎么知道两个是否相等 - 除了比较每个字节?如果你不知道它们是否相同,你怎么能期望在哈希表中找到它们? – ControlAltDel 2012-04-17 21:56:07

+0

谢谢......好的,那是绝对正确的。但我的思维方式不同。假设有一个void类型的数据。我们必须把它保存在一个表格中。 – 2012-04-17 21:58:56

+1

如果(a)你知道它们有多长时间,并且(b)你愿意接受长度平等加字节平等作为你定义两个blob的相等性,那么散列和比较blob数据没有困难。这个问题相当简单,但你并没有真正说过你被困在哪里,所以人们很难提供很好的答案。 – dmckee 2012-04-17 22:02:16

回答

2

CityHash,里面有,我认为是适合你输入的功能:

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

据我所知道的,所用字符作为输入类型仅仅是为了方便 - 它不意味着例如该函数如果发现零字节将停止散列。

还有一个128位版本和其他东西。

1

只要还需要缓冲区的长度,您可以使用任何接受任何类型指针的散列函数。只需投射指针并使用它。大多数散列函数将使用一个char *输入和一个size_t长度。

尽管如此,您可能没有标题的长度。如果你没有这个长度,它将不起作用。

+0

谢谢...长度问题是没有,我有。和afcouse有很多功能。但我想要这样做。 :)。一个blooper,我正在做的是char * a =&(char)(void)(ccHrd);这是我知道错误,但。它讲述了我正在尝试做的事情。 – 2012-04-21 15:13:20