tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
3
ZUGRIFFE
187
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Muggefronc Muggefronc ist offline Mitglied
    Registriert seit
    Nov 2008
    Beiträge
    10
    Hi,
    bekannterweise ist nicht garantiert, dass die Funktion GetHashCode im .NET Framework in verschiedenen Frameworkversionen die gleichen Werte ausgibt. Dummerweise wurde unter Verwendung von GetHashCode eine Datenbank erstellt, auf die ich nun zugreifen muss. Mit dem FW 3.0 funktioniert es wunderbar also wollte ich um sicher zu gehen, dass mit zukünftigen FW-Versionen keine bösen überraschungen entstehen diese funktion selbst in meinem Code einbauen. Dazu hab ich mit Reflector die den Originalcode geholt und eingebaut. Allerdings liefert meine eingebaute variante andere Ergebnisse.
    Hat jemand ne Ahnung woran das liegen kann?

    das Original
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    
    [ReliabilityContract(Consistency::WillNotCorruptState, Cer::MayFail)]
    public: override Int32 __gc* GetHashCode()
    {
        fixed (Char __gc** str = *static_cast<__box Char __gc***>(this))
        {
            Char __gc** chPtr = str;
            Int32 __gc* num = 0x15051505;
            Int32 __gc* num2 = num;
            Int32 __gc** numPtr = *static_cast<__box Int32 __gc***>(chPtr);
            for (Int32 __gc* i = this->Length; (i > 0); i -= 4)
            {
                num = ((((num << 5) + num) + (num >> 0x1b)) ^ numPtr[0]);
                if (i <= 2)
                {
                    break;
                }
                num2 = ((((num2 << 5) + num2) + (num2 >> 0x1b)) ^ numPtr[1]);
                numPtr += 2;
            }
            return (num + (num2 * 0x5d588b65));
        }
    }

    meine Variante
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    
    int GetHashCode(String^ str)
    {
        __int32 num = 0x15051505;
        __int32 num2 = num;
        __int32* numPtr=(__int32*)(Marshal::StringToHGlobalUni(str).ToPointer());
        for (__int32 i = str->Length; (i > 0); i -= 4)
        {
            num = ((((num << 5) + num) + (num >> 0x1b)) ^ numPtr[0]);
            if (i <= 2)
            {
                break;
            }
            num2 = ((((num2 << 5) + num2) + (num2 >> 0x1b)) ^ numPtr[1]);
            numPtr += 2;
        }
        return (num + (num2 * 0x5d588b65));
    }
    Geändert von Muggefronc (30.11.08 um 14:32 Uhr)
     

  2. #2
    Avatar von Nico Graichen
    Nico Graichen Nico Graichen ist offline aka gemballa
    tutorials.de Moderator
    Registriert seit
    Dec 2003
    Ort
    Pulheim (NRW)
    Beiträge
    3.898
    Blog-Einträge
    34
    Hi und willkommen

    Auch wenn du neu bist: Doppelpost sind unerwünscht
    http://www.tutorials.de/forum/net-ca...thashcode.html
    Das Lesen der Forenregeln sollte doch noch gar nicht so lange her sein
     
    Grüße Nico
    ----------------------
    Xing
    ----------------------
    Zitat Zitat von Mark Twain (1835-1910)
    Es gibt drei Dinge, die eine Frau aus dem Nichts hervorzaubern kann: einen Hut, einen Salat und einen Ehekrach.
    Zitat Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
    The Difference Between God and Larry Ellison: God Doesn't Think He's Larry Ellison

  3. #3
    Muggefronc Muggefronc ist offline Mitglied
    Registriert seit
    Nov 2008
    Beiträge
    10
    Das war nicht als Doppelpost gedacht. Es geht ja dabei um 2 verschiedene Fragen. Einmal die Portierung nach PHP und einmal nach C++. D.h. die Posts sind ja in diesem Fall nicht als doppelt zu sehen?
    Geändert von Muggefronc (30.11.08 um 17:53 Uhr)
     

  4. #4
    Muggefronc Muggefronc ist offline Mitglied
    Registriert seit
    Nov 2008
    Beiträge
    10
    Da such ich die ganze Zeit an der falschen Stelle...*tztz*
    Die Funktion ist einwandfrei. Hab im Eifer des Gefechts nen falschen String übergeben.
     

Ähnliche Themen

  1. GWT in JSP integrieren
    Von Davtorik im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 2
    Letzter Beitrag: 25.01.10, 11:54
  2. Algorithmus von String.GetHashCode()
    Von Muggefronc im Forum .NET Café
    Antworten: 3
    Letzter Beitrag: 09.12.08, 02:07
  3. Antworten: 10
    Letzter Beitrag: 14.11.07, 13:34
  4. Antworten: 5
    Letzter Beitrag: 12.06.06, 07:28
  5. AVI in c4d integrieren
    Von Freakt im Forum Cinema 4D
    Antworten: 2
    Letzter Beitrag: 24.05.04, 01:48