Чтобы создать хеш, вам нужно только целочисленное значение каждого символа в строке, а не значение ASCII. Это две совершенно разные вещи. ASCII - это кодировка. Ваша строка также может быть в кодировке UTF-8, что будет означать, что ваша строка заканчивается единственным NULL, но каждый символ может занимать более 1 байта. В любом случае, решение Perreal - это то, что вам нужно. Однако я написал это как отдельный ответ, потому что вам нужно понимать разницу между кодировкой и типом хранилища, которым является 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;
}
Наконец, вы все еще можете суммировать элементы строки без C ++ 11, используя std :: аккумуляцию:
#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;
}