- ベストアンサー
CString を使わないで小数点キャスト
MFCを使っています。 CString strTest; strTest.Format("%5.2f%", 50.12) としているのを、CStringを使わないでfloatから文字列にしたいのですが、 どのようにすればよいでしょう? 簡単な方法は無いでしょうか? 変換後は DrawText で表示するものです。 よろしくお願いします。
- spendtoomuch
- お礼率51% (45/87)
- C・C++・C#
- 回答数2
- ありがとう数3
- みんなの回答 (2)
- 専門家の回答
関連するQ&A
- キャストについて str = (CString*)("999") ;
環境 WIN98 VC++6.0 MFC にて いつもお世話になります。 先日質問したばかり(QNo.682705)なのですが、やはり納得できないことがあるのでお願いします。 分かっている人からみれば、おかしな疑問と思われるかも知れませんが、私にとっては素朴に疑問が生じてしまいます。 *************************** 以下2つのコードのうち、<A>は文法的にOKで<B>がNGな理由が知りたいです。 <A> CString* str ; str = (CString*)m_array.GetAt(i) ; //OK <B> CString* str ; str = (CString*)("999") ; //NG <A>は、m_arrayの要素にCString*を入れていて、初めて成り立つ式です。 と教わりましたが、むしろ私にはCString*以外が入っているため、CString*のキャストしていると思える。 CString*が入っているのなら、キャストする必要は無いのではないでしょうか? ネット上で見つけたコードなため、実際の値やm_arrayの宣言がどうなっているかは確認出来ません。 そして、<A>がおかしなコードでは無いという大前提にたつと、<A>は別の表現をすると <A> str = (CString*)(CString*以外のポインタ) ; となります。 そうすると<B>のコードも、"999"は999の文字列が入っているアドレスを指すポインタであるという考えが正しいとすると、 <B> str = (CString*)(999をさすポインタ) ; となり、おかしなコードではないと思えるのですが、考え方のどこがおかしいのでしょうか? ************************** 以下のことを教わった上であえて聞いています。 str = (CString*)("999"); は、リテラル文字列をつっこもうとしています。 リテラル文字列とCStringはまったく別物です。
- ベストアンサー
- C・C++・C#
- CStringについて
CStringにおいてFindではエラーが出ないのに、ReverseFindだとエラーがでます。 error C2664: 'ReverseFind' : 1 番目の引数を 'char [4]' から 'char' に変換できません。 (新しい機能 ; ヘルプを参照) この変換には reinterpret_cast, C スタイル キャストまたは関数スタイルのキャストが必要です。 キャストするとエラーは出ませんが文字列の検索は失敗してしまいます。 Findはまったく問題無いのにどうしてこのようなことが起きるのでしょう? どう対処すれば良いか教えてください。 CString ddd; ・ ・ nn=ddd.Find("DOW"); ←エラーなし nn=ddd.ReverseFind("DOW"); ←エラーあり 環境はWIN98 VC++6.0 MFCです。
- ベストアンサー
- C・C++・C#
- CString 大量連結
VC++6.0のMFCで開発してます。 プログラム内で CString str; str += ○○ とやって連結し終わった後にstrを使って 処理をする所があって試した所すごく遅く、文字列がかなり 長いと固まってしまいます。調べたらCStringの大量連結は パフォーマンスががた落ちって書いてありました。 何か良い方法はないでしょうか? ※連結は必須です。
- ベストアンサー
- C・C++・C#
- Windowsアプリケーションのクラッシュ(CStringによる?)
社内で使用しているアプリケーションを以下の環境で製作しています。 VC Ver6、MFC使用 OS:Windows2000 このとき、一定期間(45~49日)をおくとクラッシュ してしまう現象が発生してしまい、試しにデバッガ上で動作させてみて試したところ、CStringで定義したオブジェクトに”=”で直接、文字列を代入している箇所でブレークポイントがかかっていました。但し、この場所としてはMFCのCFileクラスのOpenの中でした。 そこで以下の項目について何か情報があれば教えていただけないでしょうか。 1.CStringのマイクロソフト自身のヘルプ情報に以下のような”=”を使用した文字列の代入はメモリリークを発生する可能性があります、とありました。これを避けるには例えばFormat等を使用すれば回避できるものでしょうか。 例:CString aaa; aaa = ”1234”; これを以下のように変更。 aaa.Format(”1234”); 2.最初に記述しているように、MFC側でも項目1のような使用法を行っているようですが、このMFCはソースがあるので、それを仮に修正して試すようなことは一般的に可能でしょうか。 以上よろしくお願いします。 不明点等あれば御連絡お願いします。
- 締切済み
- C・C++・C#
- 小数点入りの文字列をfloat型に変換
例えば、 32.1 のように4文字の文字列が、あるchar型配列に入っている場合、この値を使って計算したいので、float型などに変換したいのですが、どんな方法がありますか?
- ベストアンサー
- C・C++・C#
- VC++2005で、CString型に16進文字列を入れたいのですが・・
VC++2005で、CString型に16進文字列を入れたいのですが・・・ 次のようなエラーが出ます。 void ATL::CStringT<BaseType,StringTraits>::Format(const wchar_t *,...)' : 1 番目の引数を 'const char [5]' から 'const wchar_t *' に変換できません。 プログラムは次の通りです。 CString strBuff; CString strWork; TCHAR tszBuff[80]; UINT unLength; UINT un1; unLength = 5; strBuff = "12345"; _tcscpy(tszBuff, strBuff); strWork = ""; for(un1 = 0; un1 < unLength; un1++) { strWork = strWork + strBuff.Format("%02x", tszBuff[un1]); ←ここにエラーがあると言われています。 } 結果は、strWorkに、"3132333435"となるようにしたい! ネットで探したら、 >UNICODEを使われているのだと思われます。 >T("")マクロを使ってワイドキャラクタに変換するように指示すれば動くと思います。 とあったので、 strWork = strWork + strBuff.Format(_T("%02x"), tszBuff[un1]); としてみたのですが、 二項演算子 '+' : 型 'void' の右オペランドを扱う演算子が見つかりません (または変換できません)。 というエラーが表示されました。 VC++6.0を半年かじり、今日、初めてVC++2005に触った程度の初心者です。 どなたか助言を頂ければ幸いです。 環境 Windows XP Pro SP3 Visual C++ 2005(MFC) 以上、よろしくお願いします。
- ベストアンサー
- C・C++・C#
- C++(VC6)で、CString型を配列へ
C++(VC6)で、CString型の文字列をCString型の配列へセットする方法を教えてもらえませんか? キーワード検索で、AND検索・OR検索を実現する為に、まずはCString型の文字列をCString型の配列にセットしたいです。 例えば、 □阪神□□□野球□赤松□□ と入力されたCString型の文字列を、 keyword[0] = 阪神 keyword[1] = 野球 keyword[2] = 赤松 と、セットしたいのです。 ※文字列中の"□"は全角空白、または半角空白を表しています。 よろしくお願い致します。
- ベストアンサー
- C・C++・C#
- 文字化けしない書き方
CString str = "%#.3f" という文字列に関して、数字部分をint valで置き換えたいなと思っています。 そこで、Formatを使って以下のように書きましたが、%#.が文字化けしてしまいます。 str.Format("%s%df", "%#.", val); 1文字ずつなら表示されるようなのですが、%#あるいは#.とやると文字化け(□)になって しまいます。なので、 str.Format("%s%s%s%df", "%", "#", ".", val); とやると、表示されるには表示されるのですが、str.Format("%s%df", ...)という書き方で 書けたらなと思っています。何か方法はないでしょうか。 よろしくお願いいたします。 環境はWindowsXP, VC2005++ &MFC です。
- ベストアンサー
- C・C++・C#
- C#のキャストについて(32bit浮動小数点)
こんにちは。 現在、Visual Studio 2005を使用してC#のプログラムを作成しています。 32bitの浮動小数点のデータを表示しようとしているのですがうまくいきません。 具体的な例としては 0x42F6E9E0 → 123.456789 0x4476E9E0 → 987.654321 のように変換した結果を表したいと考えています。 c言語では int main() { int h = 0x42F6E9D5; float f; f = *(float *)(&h); return 0; } のようにすればfで値(123.45678)が取得できたのですが、 これと同じ事をC#ではどのように書くのでしょうか? ポインタを含んだキャストのやり方がわかりません。 以上よろしくお願い致します。
- ベストアンサー
- その他(プログラミング・開発)
お礼
有難うございます。勘違いしてました!