1

我想将 CString 转换为 const char*,我使用了它const char* cstr = (LPCTSTR)CString;但它没有编译,所以如何做到这一点,或者如何将 CString 转换为双精度,我使用了这个方法 _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);

但是,这与您最初的问题并没有真正的关系,因为无论如何您都在使用 _tstof() 来为您处理 _T 问题。

[编辑]:

错误在其他地方。TRACE 的格式字符串没有使用 wright 占位符作为浮点数/双精度数。代替 %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 回答
0
CString s( _T( "ala bala portocala" ) );
 CStringA s2( s );
 const char* c = s2;
于 2021-12-08T04:05:54.090 回答