To convert from hexa to dec, someone (RONSLOW, I think) wrote here some time ago:

int hexa2dec (CString input) {
char* dummy;
return strtol(input,&dummy,16);
}

I have used it, and it works as long as the hexa input begins with a number. I mean, I cannot convert the a1e4 value to decimal, for instance.
Why? What can I do?
###### Who is Participating?

Commented:
The string must begin with "0x" or "0X" to be considered a HEX number string  (it can have whitespace before the 0.)

continues.
0

Commented:
Here is some code

int getNumFromChar(char c){
switch(c){
case '0':return 0;
case '1':return 1;
case '2':return 2;
case '3':return 3;
case '4':return 4;
case '5':return 5;
case '6':return 6;
case '7':return 7;
case '8':return 8;
case '9':return 9;
case 'A':
case 'a':return 10;
case 'B':
case 'b':return 11;
case 'C':
case 'c':return 12;
case 'D':
case 'd':return 13;
case 'E':
case 'e':return 14;
case 'F':
case 'f':return 15;
}
return 0;
}

int pow(int base,int exp){
for(int i=0;i<exp;++i){
base*=base;
}
return base;
}

int hexa2dec(CString input){
int forw,back,len=input.GetLength();
int ret=0;

for(forw=0,back=len-1;back>=0;
++forw,--back){

ret+=pow(16,forw) *
getNumFromChar(input[back]);

} //end for loop

return ret;
}

I know this is longer than your current solution, but it will work.

Good Luck!
0

Commented:
The bet bet is probalby to do the conversion manually,

int HexStr2Bin(const char *S)
{
int i = 0;

while (isspace(*S)) // While in leading spaces.
if (*S == '0') // If there is a leading 0.
{
if (*S = 'x' || *S = 'X") // If this is a leading 0x, then
++S; // Skip the X.
}
while (char c = *s++)
{
if (!isxdigit(c)) // If not a hex digit, then
break; // Stop converting.
i *= 16; // make "room" for new digit.
if (isdigit(c)) // If this is a digit, then
{
i += c - '0'; // add on digit.
}
else
{
c =  toupper(c);
i += c - 'A';
}
}
return i;
}

Let me know if you havne any questions.
0

Commented:
tvanceplus, you might want to look at the code I wrote.  Its a lot more efficient, and a bit more flexible too.
0

Author Commented:
Im afraid your code doesnt work. If I write 0xA11, it translates 11, so it doesnt begin to translate until it finds a number, and it doesnt translate the first characters (no-numbers) anyway.
For instance, 0xaaeca isnt translated at all.
0

Author Commented:
nietod, my last comment wasnt accurate: 0xaaeca is translated, but bad translated.

Your programm converts 1(hexa) to 16(decimal)!!
0

Author Commented:
Adjusted points from 50 to 60
0

Commented:
There were two little mistakes.  The compiler should have reported 1.  The line

if (*S = 'x' || *S = 'X")

shoiuld be

if (*S == 'x' || *S == 'X')

and

i += c - 'A';

should be

i += c - 'A' + 10;

(Which is the REAL problem).

Note that the procedure is pretty flexible.  The "0x" is optional as are leadig whitespace characters.
0

Author Commented:
Adjusted points from 60 to 70
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.