Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. General Programming
  3. C / C++ / MFC
  4. Convert CString to int or float

Convert CString to int or float

Scheduled Pinned Locked Moved C / C++ / MFC
c++
15 Posts 6 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • T Offline
    T Offline
    Trupti Mehta
    wrote on last edited by
    #1

    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

    C K D M 4 Replies Last reply
    0
    • T Trupti Mehta

      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

      C Offline
      C Offline
      CPallini
      wrote on last edited by
      #2

      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]

      T 1 Reply Last reply
      0
      • T Trupti Mehta

        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

        K Offline
        K Offline
        killabyte
        wrote on last edited by
        #3

        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

        C 1 Reply Last reply
        0
        • K killabyte

          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

          C Offline
          C Offline
          CPallini
          wrote on last edited by
          #4

          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]

          K S 2 Replies Last reply
          0
          • T Trupti Mehta

            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

            D Offline
            D Offline
            David Crow
            wrote on last edited by
            #5

            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

            1 Reply Last reply
            0
            • C CPallini

              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]

              K Offline
              K Offline
              killabyte
              wrote on last edited by
              #6

              Yeah i really liked that quote in your sig :-D

              1 Reply Last reply
              0
              • C CPallini

                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]

                S Offline
                S Offline
                SandipG
                wrote on last edited by
                #7

                I like second more :D :D

                Regards, Sandip.

                1 Reply Last reply
                0
                • T Trupti Mehta

                  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

                  M Offline
                  M Offline
                  Mark Salsbery
                  wrote on last edited by
                  #8

                  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:

                  1 Reply Last reply
                  0
                  • C CPallini

                    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]

                    T Offline
                    T Offline
                    Trupti Mehta
                    wrote on last edited by
                    #9

                    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

                    C 1 Reply Last reply
                    0
                    • T Trupti Mehta

                      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

                      C Offline
                      C Offline
                      CPallini
                      wrote on last edited by
                      #10

                      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]

                      T 1 Reply Last reply
                      0
                      • C CPallini

                        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]

                        T Offline
                        T Offline
                        Trupti Mehta
                        wrote on last edited by
                        #11

                        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

                        C 1 Reply Last reply
                        0
                        • T Trupti Mehta

                          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

                          C Offline
                          C Offline
                          CPallini
                          wrote on last edited by
                          #12

                          If ypur system really doesn't provide wtof, you may consider to convert your wide character string into standard (i.e. ANSI) one, via WideCharToMultiByte), and then use atof. :)

                          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]

                          T 1 Reply Last reply
                          0
                          • C CPallini

                            If ypur system really doesn't provide wtof, you may consider to convert your wide character string into standard (i.e. ANSI) one, via WideCharToMultiByte), and then use atof. :)

                            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]

                            T Offline
                            T Offline
                            Trupti Mehta
                            wrote on last edited by
                            #13

                            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

                            C 1 Reply Last reply
                            0
                            • T Trupti Mehta

                              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

                              C Offline
                              C Offline
                              CPallini
                              wrote on last edited by
                              #14

                              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 write

                              int 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]

                              T 1 Reply Last reply
                              0
                              • C CPallini

                                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 write

                                int 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]

                                T Offline
                                T Offline
                                Trupti Mehta
                                wrote on last edited by
                                #15

                                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

                                1 Reply Last reply
                                0
                                Reply
                                • Reply as topic
                                Log in to reply
                                • Oldest to Newest
                                • Newest to Oldest
                                • Most Votes


                                • Login

                                • Don't have an account? Register

                                • Login or register to search.
                                • First post
                                  Last post
                                0
                                • Categories
                                • Recent
                                • Tags
                                • Popular
                                • World
                                • Users
                                • Groups