我想将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));
答案 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;