• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VC++2005で、CString型に16進文字列を入れたいのですが・・)

VC++2005で、CString型に16進文字列を入れたい!エラーが発生する。

このQ&Aのポイント
  • VC++2005で、CString型に16進文字列を入れる際にエラーが発生しています。
  • プログラムの一部にエラーがあり、エラーが修正されたら正しい結果が得られることを期待しています。
  • 初心者の方でVC++2005を使用しており、エラーの解決策を助言していただけると幸いです。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

CString::Formatに戻り値はありません。 自分自身が変更されることになります。 http://msdn.microsoft.com/ja-jp/library/18he3sk6.aspx どっちにみ + するのであれば、AppendFormatを使うほうが良いでしょう。 >strWork = strWork + strBuff.Format(_T("%02x"), tszBuff[un1]); strWork.AppendFormat(_T("%02x"), tszBuff[un1]);

taka077
質問者

お礼

早速の回答、ありがとうございます。 おかげさまで、思い通りの結果が得られました。 ちなみに、「strBuff」は作業用で、元の値は「tszBuff」へコピーされていますので、変更されても問題ありません。 AppendFormatで正常動作を確認した後に分かった事ですが、 strBuff.Format(_T("%02x"), tszBuff[un1]); strWork = strWork + strBuff; とやれば、正常に動作しました。 ただ、VC++6.0とVC++2005の違いがこれほどとは思いませんでした。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • CString から LPCTSTRの型に変換

    visual studio 2013 VC++を使用していますが、WINDOWSの関数に渡すためにCString からLPCTSTRに変換する必要があります。実際にどのようにするのかわかりません。 例えば、以下のサンプルは他の質問コーナーの回答をアレンジしたものです CString str = _T("ABC"); int siz = str.GetLength()+1; LPCTSTR pszFName = new TCHAR[siz]; _tcscpy_s( pszFName, siz, str ); で変換するのですが LPCTSTRからwchar_t*へ変換できませんとエラーがでます _tcscpy_s()は使用できないのでしょうか

  • CStringをwchar_tに変換したい

    CStringをwchar_tに変換したく思い、ネットで探したところ、 http://msdn2.microsoft.com/ja-jp/library/ms235631(VS.80).aspx のページを見つけたので、下記のプログラムを組んで実行してみましたがエラーになって しまいます。 【プログラム】 CString orig("Hello, World!"); // Convert to a char* const size_t newsize = 100; // Convert to a wchar_t* // You must first convert to a char * for this to work. size_t origsize = strlen(orig) + 1; size_t convertedChars = 0; wchar_t wcstring[newsize]; mbstowcs_s(&convertedChars, wcstring, origsize, orig, _TRUNCATE); 【エラー】 error C2664: 'strlen' : 1 番目の引数を 'CString' から 'const char *' に変換できません。 error C2664: 'mbstowcs_s' : 4 番目の引数を 'CString' から 'const char *' に変換できません。 &CStrinをconst char *でキャストしてもうまくいきません。 どこがおかしいのでしょうか? 【環境】 WindowsXP+VC++2005

  • VC++にてCString型のフルパスをfopenする

    VC++(VisualStudio2005)にてCString型のフルパスをfopenしたいと思っています。 他ページでは char *name = new char[filepass.GetLength()+1]; strcpy( name, filepass ); でstrcpyでCstring→charへ変換できるとあったのですが、 'strcpy' : 2 番目の引数を 'CString' から 'const char *' に変換できません。(新しい機能 ; ヘルプを参照) 1> この変換を実行可能なユーザー定義変換演算子がないか、または演算子を呼び出せません。 というエラーをはいて実行できませんでした。 lstrcpy(name, filepass)でも 1 番目の引数を 'char [100]' から 'LPWSTR' に変換できません。(新しい機能 ; ヘルプを参照) 1> 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。 となりました。 何か良い方法をご存じないですか? char型に変換できなくとも、結果的にfopenを使ってファイルオープンできれば良いです。

  • CString型からdouble型への変換

    C++は初心者です。VC4.0を使っていますがMFCなどは使っていません。 CString型の変数をint型やlong型への変換はなんとかできたのですが、double型へ変換することができずに困っています。atofを使えばいいのだと思い下記のように記述したのですが、コンパイルするとエラーがでます。   CString sample = "0.234";   double i;   i = atof((const char*)sample); error C2440: 'type cast' : cannot convert from 'class CString' to 'const char *' どう直せば無事にdouble i に0.234を格納できるのでしょうか?よろしくお願いします。

  • VC++6.0にて、文字列処理にて困っています。

    VC++6.0をつかっているんですが、文字列処理の部分で困っています。 CString strTime, folderPlace="c:\\", fullPath; CTime theTime = CTime::GetCurrentTime(); strTime = theTime.Format("%Y%m%d%H%M%S"); fullPath = folderPlace + strTime + ".jpg"; int fullPathLength = fullPath.GetLength() + 1; //*1 char charBuf[fullPathLength]; strcpy(charBuf, fullPath); wchar_t wCharBuf[fullPathLength * 2]; MultiByteToWideChar(CP_ACP, 0, charBuf, strlen(charBuf), wCharBuf, sizeof(wCharBuf)); とすると、【error C2057: 定数式が必要です】というエラーが*1の部分ででます。 また、 CString strTime, folderPlace="c:\\", fullPath; CTime theTime = CTime::GetCurrentTime(); strTime = theTime.Format("%Y%m%d%H%M%S"); fullPath = folderPlace + strTime + ".jpg"; char *charBuf=""; strcpy(charBuf, fullPath); wchar_t *wCharBuf=L""; MultiByteToWideChar(CP_ACP, 0, charBuf, strlen(charBuf), wCharBuf, sizeof(wCharBuf)); とすると、実行時に【 STRCAT.ASMの場所を指定してください】というエラーがでて、これ自体は検索して解決したんですが、どうしても実行時に落ちてしまいます。調べたところ、不定ポインタの指す先でstrcpyなどの文字列処理関数を使うと実行時エラーになるとのことなので、それが原因と思います。 私は、JavaやC#くらいしかあまり経験がないので、C/C++ではこのような場合どうすればいいのかわかりません。 対処方法をご存知の方、よろしくお願いします。

  • VC++MFCのC2039errorの対処法

    vc++のプログラムでedit controlにおいて,ボタンを押したらエディットボックスに書き込んだ値を読み込むプログラムを書きました. void CSerialcommunicationDlg::OnBnClickedwritebutton() { CString ss; m_writeEdit.GetWindowTextW(ss);//writeedit値を読み込み CString m_writeEdit } そうしたところ,以下のようなエラーが出てきてしまいました. 1>c:\users\documents\visual studio 2008\projects\ex1\ex1\ex1dlg.cpp(190) : error C2039: 'GetWindowTextW' : 'ATL::CStringT<BaseType,StringTraits>' のメンバではありません。 1> with 1> [ 1> BaseType=wchar_t, 1> StringTraits=StrTraitMFC_DLL<wchar_t> 1> ] このエラーへの対処方法となぜこのエラーが発生しているのかを教えていただきたいです. このコードはvc++のテキストに書いてあるとおりにやったのですが,なぜできないのか分かりません.プロジェクトをつくるときの設定か,プロパティに問題があるのでしょうか。

  • 定義した文字列を wchar_t 系の関数へ

    こんにちは。 VisualStudioでマルチバイト文字セットを使用する設定のプロジェクトで、下記のように定義された文字列を wchar_t をパラメータとする関数にセットするにはどのようにすればよろしいのでしょうか? #define _FOO "foo" void funcA( const char* const szValue ) { } void funcW( const wchar_t* const szValue ) { } void test( void ) { funcA( TEXT( FOO )) ; ← ok。 funcW( TEXT( FOO )) ; ← エラー。 } UNICODE文字セットを使用する設定のプロジェクトならば問題ないのですが、マルチバイト設定ですとエラーになってしまいます。UNICODE、マルチバイト両方にプロジェクトに対応できるにはどうきじゅつすればよろしいのでしょうか。

  • ワイド文字列とコンストラクタ

    ワイド文字列(UNICODE)をクラス化しようとしているのですが、 コンストラクタにconst wchar_t*型の引数を持たせて呼び出すと、 コンストラクタに渡された文字列が消えてしまい、wcslen()でサイズを求めると何故かサイズも0になっています。 class WideString { public: WideString(const wchar_t*); … }; WideString::WideString(const wchar_t* ws) { ::OutputDebugString(ws); // ←文字列が消えてる?表示されない int len = wcslen(ws); // ←これが0 } int main(void) { WideString wStr(L"文字列"); … } これは一体どういうことなのでしょうか。どなたか教えてください。

  • MFC C++ と C++/CLI の文字列

    VS2008です。 Library: NativeC++ with MFC -> DLL   ↑↓ Wrapper: C++/CLI with .NET -> DLL   ↑↓ Appli: VB.NET with .NET -> EXE 元々、ActiveXコントロール(非GUI利用)だったNativeC++で書かれたLibraryを MFC DLLとしてビルドし、Wrapper 経由で Appli から使用できるよう 移植をしています。 Library から必要な関数を dllexport し、wrapper から参照し、 wrapper を Appli が参照して、使用できるようにしました。 int型を引数に取り、結果として返す関数は期待どおり動作しますが、 文字列だと上手く行きません。 Wrapper/Appli は System.CString で統一したいのですが、 Library ではどのような型として宣言すれば文字列のやり取りができるでしょうか。 ( 引数・戻値の両者 ) CString wchar_t* char* System.String ALT::CStringT basic_string _bstr_t CComBSTR LPCTSTR LPTSTR PCTSTR PTSTR LPCWSTR LPWSTR PCWSTR PWSTR BSTR… なお、Library で下記のようにエクスポートし __declspec(dllexport) BSTR test(LPCTSTR data); wrapper で BSTR hoge(LPCTSTR value){ return test(value); } と宣言すると、wrapperのビルドで下記のエラーが表示されます。 エラー 1 error LNK2028: 未解決のトークン (0A000B39) "wchar_t * __cdecl test(wchar_t const *)" (?test@@$$FYAPA_WPB_W@Z) が 関数 "public: wchar_t * __clrcall wrap::hoge(wchar_t const *)" (?hoge@C3dlib@@$$FQ$AAMPA_WPB_W@Z) で参照されました。 wrapper.obj wrapper エラー 2 error LNK2019: 未解決の外部シンボル "wchar_t * __cdecl test(wchar_t const *)" (?test@@$$FYAPA_WPB_W@Z) が 関数 "public: wchar_t * __clrcall wrap::hoge(wchar_t const *)" (?hoge@C3dlib@@$$FQ$AAMPA_WPB_W@Z) で参照されました。 wrapper.obj wrapper エラー 3 fatal error LNK1120: 外部参照 2 が未解決です。

  • 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です。

このQ&Aのポイント
  • 大学生の弟が消費者金融で数十万円の借入をし、詐欺被害に遭った可能性があります。
  • 弟は友人から企業の信頼調査の仕事を紹介され、仲間と会って借金の契約をしたと述べています。
  • 契約書がなく口頭での指示であり、給料の明細も不自然であり、どのように対応すべきか悩んでいます。
回答を見る

専門家に質問してみよう