Convert CString to int or float
-
i think your running into trouble with the double cast ((char*)(LPCTSTR)csValue i think LPCTSTR boils down to wchar_t so the double cast (char*)(wchar_t*) would be doing horrid things the wise Pallini has stated the appropreaite funcs
killabyte wrote:
the wise Pallini
like Alfonso of my sign. :laugh: Thank you. :)
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
[My articles] -
In Evc++4, I want to convert CString to int/float. I use the following code :
// CONVERT STRING TO INT CString csValue; GetDlgItem(IDC\_OpNo\_EDIT)->GetWindowText( csValue ); m\_opNo = atoi((char\*)(LPCTSTR)csValue);
The above code works, but only with the first digit, so If I enter 34, I only get 3 in m_opNo int. same happens with float atof. Can anyone tell what changes ae required to get full digit from CString to int. Is I enter 34 I want 34 as int.
Thanks Terry
Trupti Mehta wrote:
m_opNo = atoi((char*)(LPCTSTR)csValue);
What's with all the casts?
"Love people and use things, not love things and use people." - Unknown
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
-
killabyte wrote:
the wise Pallini
like Alfonso of my sign. :laugh: Thank you. :)
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
[My articles] -
killabyte wrote:
the wise Pallini
like Alfonso of my sign. :laugh: Thank you. :)
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
[My articles] -
In Evc++4, I want to convert CString to int/float. I use the following code :
// CONVERT STRING TO INT CString csValue; GetDlgItem(IDC\_OpNo\_EDIT)->GetWindowText( csValue ); m\_opNo = atoi((char\*)(LPCTSTR)csValue);
The above code works, but only with the first digit, so If I enter 34, I only get 3 in m_opNo int. same happens with float atof. Can anyone tell what changes ae required to get full digit from CString to int. Is I enter 34 I want 34 as int.
Thanks Terry
As DavidCrow asked....what's with the casts? I always recommend using NO casts unless absolutely necessary. If something doesn't compile without the cast, look CLOSELY AT WHY before casting away the problem. In this case, you casted away your compile-time problem and turned it into a run-time problem :) Mark
Mark Salsbery Microsoft MVP - Visual C++ :java:
-
int i = _ttoi(csValue);
double f = _tstof(csValue);
:)
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
[My articles]Thanks CPallini & everybody else. This solved my problem for int's but not for float as _ttof or _tstof id not defined in tchar also. I am using eVc++4.0 with WinCE 5. I can't find the functions in eVC help or tchar.h file also & it throws compilation error : error C2065: '_tstof' : undeclared identifier Any other alternative to do the above task would be great.
Thanks Terry
-
Thanks CPallini & everybody else. This solved my problem for int's but not for float as _ttof or _tstof id not defined in tchar also. I am using eVc++4.0 with WinCE 5. I can't find the functions in eVC help or tchar.h file also & it throws compilation error : error C2065: '_tstof' : undeclared identifier Any other alternative to do the above task would be great.
Thanks Terry
Well you can rool your own version:
#ifdef _UNICODE
#define _tstof wtof
#else
#define _tstof atof
#endif:)
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
[My articles] -
Well you can rool your own version:
#ifdef _UNICODE
#define _tstof wtof
#else
#define _tstof atof
#endif:)
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
[My articles]Thanks CPallini for your quick response. I entered your code on top of my file (after #includes) & used _tstof(csValue), but it gives me the same error for wtof. I also can't find wtof or _wtof in Help of Evc++4. wtoi is available but not wtof. TChar.h is included. error C2065: 'wtof' : undeclared identifier Any further help, please.
Thanks Terry
-
Thanks CPallini for your quick response. I entered your code on top of my file (after #includes) & used _tstof(csValue), but it gives me the same error for wtof. I also can't find wtof or _wtof in Help of Evc++4. wtoi is available but not wtof. TChar.h is included. error C2065: 'wtof' : undeclared identifier Any further help, please.
Thanks Terry
If ypur system really doesn't provide
wtof
, you may consider to convert your wide character string into standard (i.e.ANSI
) one, viaWideCharToMultiByte
), and then useatof
. :)If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
[My articles] -
If ypur system really doesn't provide
wtof
, you may consider to convert your wide character string into standard (i.e.ANSI
) one, viaWideCharToMultiByte
), and then useatof
. :)If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
[My articles]Hello, Thanks. I tried the following way :
CString csValue; GetDlgItem(IDC\_PRICE\_EDIT)->GetWindowText(csValue);
.....
char* dest;
WideCharToMultiByte(CP_ACP, 0, csValue, -1, dest, 10, NULL, NULL);
float flt = (float)atof(dest);
CString d(_T("Converted Float:"));
d.Format(_T("%s %.2f"), d, flt);
AfxMessageBox(d);Using WideCharToMultiByte method, I put all values accordingly & converted to float using atof. I get the converted value. BUT as soon as the Converted .. msg box is displayed I also get "Assertion Failed!" :File thrdcore.cpp, Line 867 Abort/Ret/Ig. Retry or ignore doesn't respond so I have to select Abort. It points to if (m_nDisablePumpCount != 0) { TRACE0("Error: CWinThread::PumpMessage called when not permitted.\n"); --------> ASSERT(FALSE); } of PumpMessage(). Where am aI going wrong can you point out? Do I need to change anything in Wide...(). AS dest is not initialized, I get warning message for that also. I have also noted that in eVC++4 I get exceptions at Assert many times, any special reason?
Thanks Terry
-
Hello, Thanks. I tried the following way :
CString csValue; GetDlgItem(IDC\_PRICE\_EDIT)->GetWindowText(csValue);
.....
char* dest;
WideCharToMultiByte(CP_ACP, 0, csValue, -1, dest, 10, NULL, NULL);
float flt = (float)atof(dest);
CString d(_T("Converted Float:"));
d.Format(_T("%s %.2f"), d, flt);
AfxMessageBox(d);Using WideCharToMultiByte method, I put all values accordingly & converted to float using atof. I get the converted value. BUT as soon as the Converted .. msg box is displayed I also get "Assertion Failed!" :File thrdcore.cpp, Line 867 Abort/Ret/Ig. Retry or ignore doesn't respond so I have to select Abort. It points to if (m_nDisablePumpCount != 0) { TRACE0("Error: CWinThread::PumpMessage called when not permitted.\n"); --------> ASSERT(FALSE); } of PumpMessage(). Where am aI going wrong can you point out? Do I need to change anything in Wide...(). AS dest is not initialized, I get warning message for that also. I have also noted that in eVC++4 I get exceptions at Assert many times, any special reason?
Thanks Terry
Trupti Mehta wrote:
Where am aI going wrong
You didn't allocate memory for the
dest
buffer. The buffer should large enough to get the converted string. Hence you may writeint iLen = csValue.GetLenght();
char * dest = new char[iLen+1];
WideCharToMultiByte(CP_ACP, 0, csValue, -1, dest, iLen, NULL, NULL);
// Perform conversion to float
delete [] dest;or, using a reasonably large array:
char dest[MAX_PATH+1];
WideCharToMultiByte(CP_ACP, 0, csValue, -1, dest, MAX_PATH, NULL, NULL);:)
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
[My articles] -
Trupti Mehta wrote:
Where am aI going wrong
You didn't allocate memory for the
dest
buffer. The buffer should large enough to get the converted string. Hence you may writeint iLen = csValue.GetLenght();
char * dest = new char[iLen+1];
WideCharToMultiByte(CP_ACP, 0, csValue, -1, dest, iLen, NULL, NULL);
// Perform conversion to float
delete [] dest;or, using a reasonably large array:
char dest[MAX_PATH+1];
WideCharToMultiByte(CP_ACP, 0, csValue, -1, dest, MAX_PATH, NULL, NULL);:)
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
[My articles]Thanks CPallini, its working perfectly as expected. Got rid from all type casts. Thanks a lot to all of you trying to solve my problem.
Thanks Terry