# Convert a CString to an int.

You may be thinking "Just use atoi"... but that does not work in this case.  I am trying to convert a CString, "0x8b", to an int value of   0x8b  .    Here is some code that I have used:

char      Txt[3];
int      Val;
Txt = "0x8b";
if (strlen(Txt)==2)
{
if (Txt[0]>='a') Txt[0]&=~0x20;
if (Txt[1]>='a') Txt[1]&=~0x20;
if (((Txt[0]>='0' && Txt[0]<='9') || (Txt[0]>='A' && Txt[0]<='F')) && ((Txt[1]>='0' && Txt[1]<='9') || (Txt[1]>='A' && Txt[1]<='F')))
__asm {
mov      ax,word ptr Txt
sub      ax,0x3030
cmp      al,0x11
setb      dl
dec      dl
and      dl,7
sub      al,dl
cmp      ah,0x11
setb      dl
dec      dl
and      dl,7
sub      ah,dl
shl      al,4
or            al,ah
movzx      eax,al
mov      Val,eax
}
}

This is some code that a friend gave to me in order to do this.  It doesnt work in MFC though.  Is there another way to do this, that works?  Please help!
Asked:
###### Who is Participating?

Commented:
If you are able to use the sscanf function then this will be the easiest way...

int val;
char txt[] = "0x8b";
sscanf(&txt[2], "%x", &val);
0

Sr Program ManagerCommented:
Hi,

Here is one way to do it.

CString str("0x123");
CString strTemp;
strTemp = str.Right(str.GetLength()-2);
int hexval = 0;
sscanf(strTemp, "%X", &hexval);

Now Ur hexval will contain the value of 0x123.

Try it out.
VinExpert
0

Sr Program ManagerCommented:
And it works for Ur case also.

VinExpert
0

Commented:
You can just do this:

int val = 0;
CString text = "0x8b";
sscanf(text, "%x", &val);
0

Commented:
Simply use the C Run-time library function _tcstoul (strtoul/wcstoul).

#include <tchar.h>
#include <stdlib.h>

LPTCSTR lpszStr = _T("0x8b");
LPTCSTR lpszStop;

unsigned long ulNum = _tcstoul(lpszStr, &lpszStop, 16);
0

Commented:
CString str(_T("0x8b"));
LPTCSTR lpszStop;

long lNum = _tcstol(str, &lpszStop, 16);
0

Author Commented:
Thanks a lot paul!
0

Author Commented:
And thanks to everyone else who answered.  As for mnewton,  your answer was the same as his, but he answered first.  Thanks again.
0

Commented:
That's fine. The reason I added a comment was to show it going from a CString instead of char *.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

## Already a member? Login.

All Courses

From novice to tech pro — start learning today.