![]() |
General Programming »
String handling »
Text Conversion
Intermediate
Convert a "Hex String" to an IntegerBy Anders MolinConvert a string containing a hex value to an integer |
VC6Win2K, Dev
|
|
Advanced Search |
|
|
|
||||||||||||||||
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.
General
News
Question
Answer
Joke
Rant
Admin
|
PermaLink |
Privacy |
Terms of Use
Last Updated: 15 Jan 2001 Editor: James Spibey |
Copyright 2001 by Anders Molin Everything else Copyright © CodeProject, 1999-2009 Web10 | Advertise on the Code Project |