将字符串中的每个字符转换为ASCII

时间:2012-03-06 02:39:47

标签: c++ string ascii

有人能告诉我如何轻松地将字符串中的每个字符转换为ASCII值,以便我可以对这些值求和吗? 我需要对哈希函数的值求和。

4 个答案:

答案 0 :(得分:11)

字符串中的每个字符都是ascii:

#include <string>
int main() {
  int sum = 0;
  std::string str = "aaabbb";
  for (unsigned int i = 0; i < str.size(); i++) {
    sum += str[i];
  }
  return 0;
}

答案 1 :(得分:3)

要创建哈希,基本上只需要字符串中每个字符的整数值而不是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;
}

最后,你仍然可以使用std :: accumulate来汇总没有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;
}

答案 2 :(得分:0)

假设您的意思是std::stringchar*,您可以直接对字符求和,它们已经是ASCII表示形式(与Java或.net中的Char相对)。请务必使用足够大的结果类型(至少int)。

另一方面,C ++中的字符串应该有很多哈希函数,除非这是一个练习,你最好选择其中一个。

答案 3 :(得分:-1)

将其转换为int: INT(字[X])