Download demo project - 8 Kb
Convert a "Hex String" to an Integer
Sometimes I have had a string containing a Hex Value like char s[10] =
"0xFDE8";
that I would like to convert to an integer (in this case it
would of course get the value 65000). I have not been able to find any standard C or C++ functions to do that, so I decided to write my own. It's declared as _httoi(const TCHAR *value)
and is coded using TCHAR
so it works both with and without UNICODE
defined
It's possible it could be done smarter and faster, but it works and if you like it it's yours to use for free.
Here is the code to a small console application that uses the function, and demostrates its use.
#include "stdafx.h"
#include <tchar.h>
#include <malloc.h>
int _httoi(const TCHAR *value)
{
struct CHexMap
{
TCHAR chr;
int value;
};
const int HexMapL = 16;
CHexMap HexMap[HexMapL] =
{
{'0', 0}, {'1', 1},
{'2', 2}, {'3', 3},
{'4', 4}, {'5', 5},
{'6', 6}, {'7', 7},
{'8', 8}, {'9', 9},
{'A', 10}, {'B', 11},
{'C', 12}, {'D', 13},
{'E', 14}, {'F', 15}
};
TCHAR *mstr = _tcsupr(_tcsdup(value));
TCHAR *s = mstr;
int result = 0;
if (*s == '0' && *(s + 1) == 'X') s += 2;
bool firsttime = true;
while (*s != '\0')
{
bool found = false;
for (int i = 0; i < HexMapL; i++)
{
if (*s == HexMap[i].chr)
{
if (!firsttime) result <<= 4;
result |= HexMap[i].value;
found = true;
break;
}
}
if (!found) break;
s++;
firsttime = false;
}
free(mstr);
return result;
}
int main(int argc, char* argv[])
{
TCHAR *test[4] = {_T("0xFFFF"), _T("0xabcd"), _T("ffff"), _T("ABCD")};
for (int i = 0; i < 4; i++)
_tprintf(_T("Hex String: %s is int: %d\n\r"), test[i], _httoi(test[i]));
return 0;
}
Well, that's all there is to it. You can either copy the code from your browser,
or download the project for Visual C++ 6.0.