msdn文章说:
“输入字符串是一个字符序列,可以解释为指定类型的数值。函数在第一个无法识别为数字一部分的字符处停止读取输入字符串。”
如果您使用包含实际数字的 unicode 字符串测试代码,您将看到正确的输出:
printf("TEST 1: %d \n", _tstoi(_T("1")));
输出:
TEST 1: 1
就像@Ylisar 所说, *toi 函数用于将数字值从字符串转换为整数变量。
以下代码将改为输出数字表示,但要注意 const 变量的指针表示。我已经留下了两个版本,所以你可以看到区别:
printf("TEST 1: %d \n", _tstoi(_T("1")));
printf("TEST a: %d \n", _tstoi(_T("a")));
WCHAR* b(_T("b"));
printf("TEST A: %d \n", _T("A"));
printf("TEST b: %d \n", *b);
输出:
TEST 1: 1
TEST a: 0
TEST A: 13457492
TEST b: 98
在http://msdn.microsoft.com/en-us/library/yd5xkb5c%28v=vs.80%29.aspx查看更多信息
如果您想总结(累积)这些值,我建议您查看 STL 范围函数,它对这些事情有奇效。例如
#include <numeric>
#include <string>
printf("TEST a: %d \n", *_T("a")); // 97
printf("TEST b: %d \n", *_T("b")); // 98
wstring uString(_T("ba"));
int result = accumulate(uString.begin(), uString.end(), 0);
printf("TEST accumulated: %d \n", result);
结果:
TEST a: 97
TEST b: 98
TEST accumulated: 195
这样您就不必让 for 循环遍历所有值。范围函数真的很适合这样的东西。
更多信息请访问:http ://www.sgi.com/tech/stl/accumulate.html