Solved

TCHAR to int

Posted on 2007-11-19
10
4,020 Views
Last Modified: 2013-12-14
Ah hello.

This seems like it should have a simple solution, but I cannot find it.  I have a single TCHAR, obtained from CString::GetAt.  I need to convert it to an integer.

I cannot use _ttoi as that requires a TCHAR* not a TCHAR.

How can I convert a single character?

TIA
0
Comment
Question by:mrwad99
  • 4
  • 4
  • 2
10 Comments
 
LVL 11

Expert Comment

by:DeepuAbrahamK
ID: 20312518
ttoi() -  did you try this?

Best regards,
DeepuAbrahamK
0
 
LVL 55

Expert Comment

by:Jaime Olivares
ID: 20312523
just do a casting operation:

TCHAR a = somestring.GetAt(5);
int i = (int)a;
0
 
LVL 11

Expert Comment

by:DeepuAbrahamK
ID: 20312538


int i = _ttoi((LPCTSTR)tchardata);

Try this way of casting as well
0
Comprehensive Backup Solutions for Microsoft

Acronis protects the complete Microsoft technology stack: Windows Server, Windows PC, laptop and Surface data; Microsoft business applications; Microsoft Hyper-V; Azure VMs; Microsoft Windows Server 2016; Microsoft Exchange 2016 and SQL Server 2016.

 
LVL 19

Author Comment

by:mrwad99
ID: 20312563
Jaime:

      CString str ( _T("1") );
      TCHAR ch = str.GetAt ( 0 );
      int n34 = ( TCHAR ) ch;

This sets 'n34' to 49, not 1.

DeepuAbrahamK:

      CString str ( _T("1") );
      TCHAR ch = str.GetAt ( 0 );
      int n34 = _ttoi ( ( LPCTSTR )ch );
      

This crashes.

???
0
 
LVL 55

Accepted Solution

by:
Jaime Olivares earned 150 total points
ID: 20312573
not sure what you need
if you want to convert just 1 character to int, then:
int i = (int)a - 48;
0
 
LVL 19

Author Comment

by:mrwad99
ID: 20312590
>> if you want to convert just 1 character to int, then:

Yes that is exactly what I need.  I get a TCHAR from CString::GetAt(), which I then need to convert to an int.  As I said above, I cannot use _ttoi as that requires a TCHAR* parameter, not a TCHAR.

>> int i = (int)a - 48;

That does the trick.  Can you explain why please, and can I 100% rely on this with UNICODE/non UNICODE apps ?
0
 
LVL 55

Expert Comment

by:Jaime Olivares
ID: 20312654
the '0'  digit has always a value of 48, in both ASCII/ANSI and Unicode.
following numbers values are 49,50,etc.
So, this always will be true.

Just you have to handle what to do, when the caracter is not a digit, that is, with a value lower and 48 or greater than 57

0
 
LVL 19

Author Comment

by:mrwad99
ID: 20312983
OK, after consideration I understand that: if I output a character A via

int i = (int)a - 48;

I get 17.  Hence the need for the range test.  Interestingly, after looking on http://www.asciitable.com/, I see that 17 is not the decimal of 'A'.  Can you tell me why this please?  (Points up 50 now to 150 for this extra question)
0
 
LVL 55

Expert Comment

by:Jaime Olivares
ID: 20313086
>>I see that 17 is not the decimal of 'A'.
I'm not sure on what you expect to have in this case.  Which is the decimal of A?
0
 
LVL 19

Author Comment

by:mrwad99
ID: 20313113
Sorry, ignore me.  I was forgetting we had subtracted 48.  (The int equivalent of A is 65, but we subtracted 48 from that to give 17.)

Looking at the asciitable I see that characters 0 - 9 are in the range 48 - 57 (inclusive), which is why we do the range test.

All is clear now :)

Thanks a lot :)
0

Featured Post

Master Your Team's Linux and Cloud Stack!

The average business loses $13.5M per year to ineffective training (per 1,000 employees). Keep ahead of the competition and combine in-person quality with online cost and flexibility by training with Linux Academy.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
matchUp  challenge 9 110
Thin secure Windows 10 5 98
how to use laptop or pad camera in vb.net windows application 2 73
Excel file not created as expected 7 72
If you use Adobe Reader X it is possible you can't open OLE PDF documents in the standard. The reason is the 'save box mode' in adobe reader X. Many people think the protected Mode of adobe reader x is only to stop the write access. But this fe…
How to install Selenium IDE and loops for quick automated testing. Get Selenium IDE from http://seleniumhq.org Go to that link and select download selenium in the right hand columnThat will then direct you to their download page.From that page s…
The viewer will learn additional member functions of the vector class. Specifically, the capacity and swap member functions will be introduced.
The viewer will be introduced to the technique of using vectors in C++. The video will cover how to define a vector, store values in the vector and retrieve data from the values stored in the vector.

803 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question