はじめまして。eMbedded C++ 4.0 (Visual C++ 4.0のモバイル用開発環境)を使っています。ほぼ Visual C++ 4.0と一緒だと聞いておりますが、MFCは使っていません。
CString 型の変数を Double型に変換したいのですが、うまくいきません。
MSDNをせっせとあさって、atof関数を使えばいいらしいところまではこぎつけたのですが、真似しようとすると、やっぱりどこか違うようでエラーがでてしまいます。
CString str2;
double dNum;
str2="0.234";
dNum = atof(str);
これをコンパイルすると
error C2664: 'atof' : cannot convert parameter 1 from 'class CString' to 'const char *'
というエラーになります。どう変更するとうまくdouble型変数dNumに0.234という値を代入できるようになるのでしょうか?
お手数ですがよろしくお願いします。
エラーメッセージにてCStringクラスをconst char *に変換できないと
いわれていますので、こちらでそうなるように対処してやればいいでしょう。
つまり、CStringからchar *をとり出す関数を探してやり、
atof()にはそれを入れてみてください。
#GetBuffer()でいいのかな?
WindowsCEでは、文字コードはUnicodeで表記すると言う前提があるのですが、
その事はきちんと把握されているでしょうか?
CEでのCStringは、通常のWindowsでいうと_UNICODEが定義されてた状態と同じです。
確か、ASCIIコードでCStringに設定しても内部的にはUNICODEに変換されていると思います。
UNICODEはWCHARであってcharではありませんからこのままではatofには渡せません。
WindowsCEでは文字列はTCHARで扱う方が問題が少ないと思います。
TCHARはUNICODE環境ではWCHARで、マルチバイト環境ではcharで扱われます。
_tcstodを使えば行けると思うのですが、試してみてはどうでしょう。
WindowsCEでプログラミングする場合の基本知識になりますので、
おさえておく方が良いと思います。
MFC 使ってないのに CString は使っているとはこれ如何に?
ちなみに VC++ 7.1 の CString には変換演算子が定義されているので成功しました。
eVC++ 4.0 にはないのかな。
GetBuffer は目的が違う期がする。
> WindowsCEでは、文字コードはUnicodeで表記すると言う前提があるのですが、
それは知らなかった。でしゃばってゴメンナサイ。
> MFCは使っていません。
と書いておいてCStringを使っているのは矛盾があると思います。
CStringもMFCの一部ですよ。
ウインドウ制御にMFCを使ってないと言う意味なのかな?
あと、Visual C++ 4.0と同じと言うのもどうかと思いますが、
時期的に言ってもVC++6.0と同じと考えるべきだと思いますよ。
あっ、シャノンさんとバッティング。(^^;
俊朗さん、PATIOさん、シャノンさん、メッセージありがとうございます。
そういえばCStringもMFCの一部でしたね。ちょっと誤解していました。
最初、俊朗さんのアドバイスをもとにこのように変更してみました。
dNum = atof( (const char*)str.GetBuffer(0));
エラーはでなくなったのですが、
str.Format(_T("%4.1f"),dNum);
AfxMessageBox(str);
で出力させると、「0.0」という値が帰ってきます。。。
PATIOさんに教わった _tcstodという関数と、WCHAR型でなくちゃダメという
情報で
WCHAR *string;
dNum= _tcstod(str,&string);
としてみたところ、無事欲しい数字がでてきました。
ありがとうございました。
すみません、解決にチェックをいれるのを忘れてました(^_^;
蛇足かもしれませんが、
WindowsCEの場合、通常のPC上で動いているWindowsに比べて
色々な制約や特殊な前提条件等があります。
WindowsCEでプログラミングをするのであれば、
この辺の基礎知識をしっかり押さえておくようにした方がいいです。
この辺りの知識がないままに勧めていると大ハマリする可能性がありますので。
誤)
この辺りの知識がないままに勧めていると大ハマリする可能性がありますので。
正)
この辺りの知識がないままに進めていると大ハマリする可能性がありますので。
ツイート | ![]() |