J'essaie d'utiliser MurmurHash (retour 64 hash bits sur un comoputer 64bit) et ont envoyé la simple chaîne 3 lettres « oui » comme suitEnvoi des chaînes C et vecteurs MurmurHash donne des résultats incohérents
char* charptr = "yes";
cout << MurmurHash64A(charptr, 3, 10);
(où 3 est la longueur et 10 est la graine) Cela donne une réponse hachée 64 bits comme prévu, je peux mettre en place plus de pointeurs sur les chaînes C en maintenant oui et ils retournent tous la même valeur hachée.
Mais si je tente d'envoyer un C++ chaîne:
string mystring = "yes";
string* strptr = &mystring;
cout << MurmurHash64A(strptr, 3, 10);
... J'obtenir un résultat différent de la méthode de chaîne C, ce qui est plus si je mis en place plusieurs de ces chaînes de la même manière , ils donnent tous des résultats différents. Cela me suggère que les chaînes ne sont peut-être pas stockées dans des emplacements de mémoire contigus, certains Googling ont soutenu cela. J'ai alors essayé de mettre en place un vecteur en mémoire dynamique car c'était la seule façon de penser à forcer la mémoire contiguë. Tout comme la méthode de chaîne C++, elle renvoyait un résultat différent de la méthode de chaîne C et lorsque j'en ai défini plusieurs, ils renvoyaient tous un résultat différent l'un de l'autre. Je les ai mis en place comme suit:
char yes[3] = {'y', 'e', 's'};
vector<char> *charvec = new vector<char>;
void* myvecptr3 = &charvec;
charvec->reserve(3);
charvec->push_back(yes[0]);
charvec->push_back(yes[1]);
charvec->push_back(yes[2]);
Si je comprends bien mon vecteur char commencera à l'adresse du vecteur est donné et de remplir octets consécutifs avec mes trois personnages de la même manière comme une chaîne C. Je suis confus pourquoi je reçois des résultats différents, toute aide appréciée? Merci C
Cela ressemble beaucoup à un [bon livre C++ d'introduction] (http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list). – sbi