CStringを数値に変換するには?

解決


joker99  2007-07-13 12:57:09  No: 65657  IP: 192.*.*.*

CString s1="100";
int i;
i = atoi(s1);

でいい気がするのですが、

'atoi':1 番目の引数を 'CString' から 'const char *' に変換できまん。

とerrorが発生します。どのようにすればいいのでしょうか?

Visual Studio 2005を使用しています。

編集 削除
joker99  2007-07-13 13:07:35  No: 65658  IP: 192.*.*.*

あと、過去logには

i = atoi( (LPCTSTR)s1 ) ;

という記述もありますが、この場合も

'atoi':1番目の引数を 'LPCTSTR' から 'const char *' に変換できません。

になります。

編集 削除
επιστημη  2007-07-13 13:32:50  No: 65659  IP: 192.*.*.*

さては Unicodeモードになってるな。
i = _tstoi(s1); はいかがでしょうか

編集 削除
joker99  2007-07-13 14:08:36  No: 65660  IP: 192.*.*.*

ありがとうございました。問題が解決しました。
ところでUnicodeモードってなんですか?

編集 削除
επιστημη  2007-07-13 14:12:42  No: 65661  IP: 192.*.*.*

マルチバイト文字(ぶっちゃけShift_JIS)を使うか
ダブルバイト文字(ぶっちゃけUnicode)を使うか
なんですが、VIsual Studio 2005以降、
Unicodeを使うのがデフォルトになってます。
# プロジェクトの設定で切りかえられるけども。

編集 削除
Blue  2007-07-13 15:56:05  No: 65662  IP: 192.*.*.*

CStringはTCHARをベースに設計されています。
一方atoiはcharのみ用の関数です。

よって、CStringでatoiのような関数を使いたい場合TCHAR用の関数
_ttoiを使います。

詳しくは
http://www.ruche-home.net/program/tips/tchar.php
を参考に。


また、キャストしてなぜ出来ないかは
http://madia.world.coocan.jp/cgi-bin/Vcbbs/wwwlng.cgi?print+200706/07060008.txt
を参考にしてください。

編集 削除