В статье MSDN говорится:
"Входная строка представляет собой последовательность символов, которые могут быть интерпретированы
как числовое значение указанного типа. Функция перестает читать
входная строка в первом символе, который не может быть распознан как
часть номера. "
Если вы протестируете код со строками Unicode, содержащими действительные числа, вы увидите правильный вывод:
printf("TEST 1: %d \n", _tstoi(_T("1")));
выход: * +1010 *
TEST 1: 1
Как сказал @Ylisar, функции * toi используются вместо преобразования числовых значений из строк в целочисленные переменные.
Следующий код вместо этого выведет числовое представление, но следите за указательным представлением константных переменных. Я оставил обе версии, чтобы вы могли увидеть разницу:
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