2008-08-19 3 views

답변

4

당신은 변경없이 거의 C 코드를 수행 할 수 있습니다

uint sdbm(string str) 
{ 
    uint hash = 0; 
    foreach(char ch in str) 
    { 
     hash = ch + (hash << 6) + (hash << 16) - hash; 
    } 
    return hash; 
} 

아니면 더 정교한 뭔가 생각 했를?

1
나는 C 컴파일러는 내가이 같은 수행 있는지 확인하기 위해 테스트 할 수 없습니다 설정하지 않지만, 나는 다음이 올바른지 생각

:

private static ulong SBDM(string str) 
{ 
    ulong hash = 0; 

    foreach (char c in str) 
    { 
     hash = c + (hash << 6) + (hash << 16) - hash; 
    } 

    return hash; 
} 

당신은 단지에 필요한 경우 문자열의 해시를 얻고 구현이 무엇인지 항상 중요하지 않습니다. theString.GetHashCode();

0

해시의 결과는 C++ 및 C# 구현마다 다릅니다. str 매개 변수를 바이트 배열로 전달해야한다고 생각했습니다.

private uint sdbm(byte[] str) 
{ 
    uint hash = 0; 

    foreach (char ch in str) 
     hash = ch + (hash << 6) + (hash << 16) - hash; 

    return hash; 
} 

해시 할 값을 BitConverter.GetBytes 메서드로 변환하여 메서드를 호출합니다.

uint Hash = sdbm(BitConverter.GetBytes(myID)); 
관련 문제