2012-04-17 3 views
0

무효화 데이터의 해시 키를 생성하는 방법을 알고 싶습니다.(void *) 데이터의 해시 키 생성

저는 네트워킹 및 패킷 처리 프로젝트를 진행하고 있습니다. 해시 테이블을 생성해야합니다. 패킷 헤더를 해시 할 패킷 헤더. 하지만 구조 나 패킷 헤더의 클래스를 모르겠습니다. 그럼, 이것에 대한 어떤 생각이든. 나는 그것을 단지 무효로 만들려고 생각하고있다. 무효화 데이터를 해싱하여 해시 키를 생성한다.

기타 아이디어. 좋은 논리가 환영됩니다.

+0

기본적으로 이것은 작동하지 않습니다. 이것을 Java의 관점에서 생각하면, hashCode는 equals와 일치해야합니다. 데이터에 대해 알지 못하는 경우 두 바이트가 같은지 여부를 어떻게 알 수 있습니까? 그리고 그들이 평등한지 모를 경우 어떻게 해시 테이블에서 찾을 수 있습니까? – ControlAltDel

+0

감사 ... 괜찮습니다. 그러나 나는 다르게 생각하고 있습니다. void 형의 데이터가 있다고합니다. 이것을 테이블에 저장해야합니다. –

+1

(a) 길이가 얼마나되는지 (b) 두 개의 얼룩의 평등에 대한 정의와 같이 길이 평등과 바이트 -와 평등을 허용하려는 경우 데이터의 크기를 해싱하고 비교하는 데 어려움이 없습니다. 문제는 상당히 쉽지만, 당신이 실제로 붙어있는 곳을 말하지 않았기 때문에, 사람들이 좋은 대답을 제공하기가 어려울 것입니다. – dmckee

답변

2

봐 나는 당신의 입력에 적합하다고 생각하는 기능이있다 CityHash,에 :

// Hash function for a byte array. 
uint64 CityHash64(const char *buf, size_t len); 
이 가 지금까지 입력 유형은 단지 편의를 위해이기 때문에 내가 문자를 사용하고 말할 수있는

- 그것은 수행을 예를 들어 함수가 0 바이트를 찾으면 해시를 중지한다는 의미는 아닙니다.

또한 128 비트 버전 및 기타 기능이 있습니다.

1

버퍼의 길이를 취하는 한 모든 유형의 포인터를 허용하는 해시 함수를 사용할 수 있습니다. 그냥 포인터를 던져서 사용하십시오. 대부분의 해시 함수는 char * 입력과 size_t 길이를 사용합니다.

그러나 질문에 헤더의 길이가 없을 수도 있습니다. 이 길이가 없으면 작동하지 않습니다.

+0

고마워 ... 길이 문제는 아무 것도없고 내가 가지고있다. 그리고 afcouse에는 많은 기능이 있습니다. 그러나 나는 이것을하고 싶다. :). 한 번 폐병, 내가하고있는 것은 char * a = & (char) (void) (ccHrd); 이것은 내가 잘못 알고 있지만. 그것은 내가 무엇을하려고하는지 그 감각을 말해줍니다. –