12,701,854 members (33,771 online)
alternative version

405.2K views
21 bookmarked
Posted

# Convert a "Hex String" to an Integer

, 15 Jan 2001
 Rate this:
Convert a string containing a hex value to an integer

## 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.

A list of licenses authors might use can be found here

## Share

 Software Developer (Senior) Denmark
Huh!

## You may also be interested in...

 View All Threads First Prev Next
 Oh my god- so much code and for what??? Something that is already done with one line using "strtol" TheBishop7-May-09 6:39 TheBishop 7-May-09 6:39
 Last Visit: 31-Dec-99 19:00     Last Update: 23-Jan-17 23:00 Refresh 1