ハッシュを作成するには、基本的にだけでなく文字列のASCII値の各文字の整数値を必要としています。彼らは2つの非常に異なるものです。 ASCIIはエンコーディングです。あなたの文字列もUTF-8でエンコードされている可能性があります。文字列が1つのNULLで終わっても、各文字は1バイト以上を占めることになります。いずれにせよ、ペルーの解があなたが望むものです。しかし、これは別の答えとして書いています。なぜなら、char型のエンコーディングと格納タイプの違いを理解する必要があるからです。
また、C + 11では、標準ライブラリに組み込まれているハッシュ関数があると言及する価値があります。これがあなたの使い方です。
#include <string>
#include <iostream>
#include <functional>
int main() {
const std::string str = "abcde";
std::cout << std::hash<std::string>()(str) << std::endl;
return 0;
}
最後に、あなたはまだのstd ::累積使用して、C++ 11のない文字列の要素を合計することができます
#include <string>
#include <iostream>
#include <numeric>
int main() {
//0x61+0x62+0x63+0x64+0x65=0x1ef=495
const std::string str = "abcde";
std::cout << std::accumulate(str.begin(),str.end(),0) << std::endl;
return 0;
}
それはもちろんEBCDICのでない限り、)(が、その後、あなたは合計と思いますEBCDICの値 - コードはまだ実行されますが、別の結果が得られます) – MSalters