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 をご覧ください。