Hashwert aus std::string



  • Hi,

    hey, die Idee mit Templates ist (auch wenn sie evtl. ironisch gemeint war), gar nicht so schlecht. Dann kann man ja auch Unicode-String hashen! 👍

    Und glaubt ihr echt, dass ein Iterator bei einem "Container" mit einer festen Größe von 4 Bytes Sinn macht? 😃

    ChrisM



  • ChrisM schrieb:

    Und glaubt ihr echt, dass ein Iterator bei einem "Container" mit einer festen Größe von 4 Bytes Sinn macht? 😃

    Von was redest Du hier?
    Ich hab das so verstanden, wir haben einen vector<char> v
    und eine list<char> l.

    Dann können wir mit

    Hash<MD5>(v.begin(),v.end());
    Hash<CRC32>(l.begin(),l.end());

    die Hash-Werte berechnen.

    MfG Jester



  • Headhunter schrieb:

    whereas ich die Klasse isDigit eher komplett statisch machen würde:
    if (isDigit::check ("23")) { ..}
    Find ich persönlich sinnvoller.

    naja...
    ob ich jetzt isDigit oder isDigit::chek() schreibe ist irgendwie egal...
    nur dass isdigit() als funktion schöner ist, da man es dann auch als functor verwenden kann...

    Wenn man mit einer Klasse arbeitet, ist es für den unbedarften User nicht möglich den Hash
    ohne weiteres zu verändern. Tut man nur mit typedefs arbeiten und man möchte den Hash in einer Klasse
    speichern, hat man ne Membervariable die durch eine unbedachte Verwendung des operator= zerschossen wird.
    Es geht mir bei meinen Source darum, dass sie so einfach und vor allem idiotensicher wie möglich sind,
    was diese typedef Variante für mich nicht ist.

    Du gehst da IMHO von ziemlichen DAUs aus...

    Wow.. es bissel viel für ne Simple Hashklasse  :open_mouth: 
    Templates fallen schonmal als Option weg, da für die Berechnung des Hashs nötig ist dass die zu berechnende
    Variable ein char ist, inklusive "wrapping around".[/quote]
    
    dh ints kann man nicht hashen? sorry, das wusste ich nicht.
    bleibt aber immer noch vecto<char>, list<char>, string, char*, etc. - eine template version wäre dabei garnicht mal schwer zu basteln:
    [cpp]
    template<typename Iterator>
    void cHash::computeHash (Iterator first, Iterator last)
    {
        _hash = ~0;
    
        //
            while(first!=last)
            {
                    computeHash(_hash, *first);
                    ++first;
            }
        //
        _hash = ~_hash;
    }
    

    Und iteratoren.. mh, mir krausen sich schon immer die Fußnägel wenn ich schon durch ne std::list iterieren
    möchte.. soviele Doppelpunkte und Sternchen, Klammern etc.. wo's durch ne (for int l=0;l<liste.size();l++) Schleife
    doch viel intuitiver gewesen wäre.

    aber ne list hat nunmal keinen random access - das könnte man nicht vernünftig implementieren (nur mit einem caching system, was aber im endeffekt die liste wieder langsamer machen würde)

    du kannst ja auch for_each nehmen 🙂

    Ein Hash ist ein konkretes Objekt, man kann es sehen, man kann damit arbeiten, es verändern etc, von daher
    halte ich es nur logisch das durch eine Klasse darzustellen (auch wenn dies sicherlich nicht der Orginalsinn
    einer Klasse im OOP ist).

    IMHO ist ein Hash-Wert ein Wert und nix anderes 🙂 denn er hat keine operationen die ich auf ihn ausführen kann - ausser berechnen

    da scheinen sich unsere meinungen zu trennen 🙂



  • Und dann hab ich folgenden Code:

    class cVfs 
    { 
    public: 
    [..] 
    private: 
     
        cHash _hash; 
    };
    

    Ja und ich habe folgenden:

    bla foo {};
    blub foo bar [8]{};
    

    Unda das ganze hat genauso viel mit korrektem Code zu tun. (_hash)

    Der Sinn einer *Klasse* cHash ist es, die Erstellung von hashes für den User so einfach und idiotensicher
    wie möglich zu machen.

    Was gibt es da zu erstellen. Verstehe ich nicht. Ist mir zu kompliziert. -> nicht DAU taugich.

    Ein Hash ist ein konkretes Objekt, man kann es sehen, man kann damit arbeiten, es verändern etc, von daher
    halte ich es nur logisch das durch eine Klasse darzustellen

    Ich kann es nicht sehen und dabei habe ich schon eine Brille 😞

    (auch wenn dies sicherlich nicht der Orginalsinn
    einer Klasse im OOP ist).

    Nochmal: Der "Originalsinn"? What da hell is that? Etwas hat einen Sinn oder keinen. Mann kann es möglicherweise zu etwas missbrauchen, was nicht der Sinn des Objektes ist. Jedoch kann es wohl kaum mehrere (hier bitte deine Wortschöpfung für den Plural von Sinn einfügen).


Anmelden zum Antworten