Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win

x
?
Solved

TCHAR to int

Posted on 2007-11-19
10
Medium Priority
?
4,148 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 4
  • 4
  • 2
10 Comments
 
LVL 11

Expert Comment

by:Deepu Abraham
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:Deepu Abraham
ID: 20312538


int i = _ttoi((LPCTSTR)tchardata);

Try this way of casting as well
0
What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

 
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 600 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

Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

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

Introduction: Database storage, where is the exe actually on the disc? Playing a game selected randomly (how to generate random numbers).  Error trapping with try..catch to help the code run even if something goes wrong. Continuing from the seve…
Introduction: Dialogs (2) modeless dialog and a worker thread.  Handling data shared between threads.  Recursive functions. Continuing from the tenth article about sudoku.   Last article we worked with a modal dialog to help maintain informat…
The goal of the video will be to teach the user the concept of local variables and scope. An example of a locally defined variable will be given as well as an explanation of what scope is in C++. The local variable and concept of scope will be relat…
The viewer will learn how to clear a vector as well as how to detect empty vectors in C++.
Suggested Courses

604 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