MSDNの記事は述べています:
は、「入力文字列が指定された型の数値として を解釈できる文字列です機能は、最初の文字で入力文字列を 読んで停止します。数字の部分に と認識されません。
あなたは、実際の数字を含むUnicode文字列を使用してコードをテストする場合は、正しい出力表示されます:@Ylisarは* TOI、言ったように
TEST 1: 1
:
printf("TEST 1: %d \n", _tstoi(_T("1")));
出力を関数を使用して数値値を文字列から整数変数に変換します。
次のコードは、代わりに数値表現を出力しますが、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
出典
2011-10-20 09:38:39
AzP
、ジョエルの「絶対最小すべてのソフトウェア開発絶対に、Unicodeとキャラクタセットについて(弁解を!)知らない必要がある」http://www.joelonsoftware.com/articles/Unicode.html – HostileFork