如何将CString转换为const char *?

时间:2012-09-25 14:11:45

标签: mfc double cstring

我想将CString转换为const char *,我使用了const char* cstr = (LPCTSTR)CString;但它没有编译,所以如何做到这一点,或者如何将CString转换为double,我使用了这个方法_tstof但它返回0当我传递CString到它时,所以我想将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));

2 个答案:

答案 0 :(得分:1)

这一行

const char* cstr = (LPCTSTR)CString;

没有编译,因为我猜你正在构建项目的UNICODE版本,因此_T扩展为2字节字符(宽字符)。

要使此转换有效,您可以使用ATL宏。像:

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

然而,这与您的初始问题并不真正相关,因为您正在使用_tstof()来处理_T问题。

<强> [被修改]:

错误在别的地方。 TRACE的格式字符串不使用wright占位符表示float / double。而不是%d使用%f:

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

我试过这个并在VS的“输出”面板中打印了12.50000000。

答案 1 :(得分:0)

我不确定您是否使用UNICODE。您应该使用通用文本映射。 无论如何:

CString csTest(_T("Test"));

const TCHAR* cstr = (LPTSTR)(LPCTSTR)csTest;