1

CString を const char* に変換したいのですが、それを使用しconst char* cstr = (LPCTSTR)CString;ましたが、コンパイルされません。その方法、または CString を double に変換する方法、このメソッド _tstof を使用しましたが、CString を渡すと 0 が返されます。ので、CString を const char* に変換して、変換された値をメソッド atof() に渡したいと思います。例を次に示します。

int nTokenPos=0;
CString leftDigit,rightDigit;
double firstNum,secondNum;

if(dialog->myValue.Find('X')!=-1){
CString resToken = dialog->myValue.Tokenize(_T("X"), nTokenPos);
leftDigit=resToken;
OutputDebugString(leftDigit);
while(!resToken.IsEmpty())
{
   resToken = dialog->myValue.Tokenize(_T("X"), nTokenPos);
   rightDigit=resToken;
   rightDigit+="\n";
  //OutputDebugString(rightDigit);
}
 firstNum= _tstof(leftDigit);
 secondNum=_tstof(rightDigit);
 OutputDebugString(leftDigit);
 OutputDebugString(rightDigit);
 TRACE( "First_Number %d\n",firstNum); --->OutPuts ZERO
 TRACE( "\nSecond_Number %d\n",secondNum); --->OutPuts ZERO
//MathFuncs::MyMathFuncs::Multiply(firstNum,secondNum);
 TRACE( "The result %d\n",MathFuncs::MyMathFuncs::Multiply(firstNum,secondNum));
4

3 に答える 3

1

この行

const char* cstr = (LPCTSTR)CString;

プロジェクトの UNICODE ビルドを構築していると思われるため、コンパイルされません。したがって、_T は 2 バイト文字 (ワイド文字) に展開されます。

この変換を機能させるには、ATL マクロを使用できます。お気に入り:

USES_CONVERSION;
const char* cstr = T2A((LPCTSTR)CString);

ただし、_T の問題を処理するとにかく _tstof() を使用しているため、これは最初の問題とは実際には関係ありません。

[編集]:

間違いは別のところにあります。TRACE のフォーマット文字列は、float/double のライト プレースホルダーを使用していません。%d の代わりに %f を使用:

CString leftDigit = _T("12.5");
double  firstNum = _tstof(leftDigit);
TRACE(_T("%f\n"), firstNum);

これを試してみたところ、VSの出力ペインに12.50000000が出力されました。

于 2012-09-25T14:42:45.697 に答える
0

UNICODE を使用しているかどうかはわかりません。一般的なテキスト マッピングを使用する必要があります。ともかく:

CString csTest(_T("Test"));

const TCHAR* cstr = (LPTSTR)(LPCTSTR)csTest;
于 2012-09-26T01:36:24.747 に答える