プロが教える店舗&オフィスのセキュリティ対策術

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)

以上、よろしくお願いします。

A 回答 (1件)

CString::Formatに戻り値はありません。


自分自身が変更されることになります。
http://msdn.microsoft.com/ja-jp/library/18he3sk6 …

どっちにみ + するのであれば、AppendFormatを使うほうが良いでしょう。

>strWork = strWork + strBuff.Format(_T("%02x"), tszBuff[un1]);
strWork.AppendFormat(_T("%02x"), tszBuff[un1]);
    • good
    • 0
この回答へのお礼

早速の回答、ありがとうございます。
おかげさまで、思い通りの結果が得られました。

ちなみに、「strBuff」は作業用で、元の値は「tszBuff」へコピーされていますので、変更されても問題ありません。

AppendFormatで正常動作を確認した後に分かった事ですが、
strBuff.Format(_T("%02x"), tszBuff[un1]);
strWork = strWork + strBuff;
とやれば、正常に動作しました。

ただ、VC++6.0とVC++2005の違いがこれほどとは思いませんでした。

お礼日時:2009/01/30 17:07

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています