将“十六进制字符串”转换为整数






3.41/5 (15投票s)
2001年1月12日

454505

1759
将包含十六进制值的字符串转换为整数
将“十六进制字符串”转换为整数
有时我有一个包含十六进制值的字符串,例如 char s[10] = "0xFDE8";
,我想将其转换为整数(在这种情况下,它当然会得到值 65000)。我没有找到任何标准的 C 或 C++ 函数来执行此操作,所以我决定编写自己的函数。它声明为 _httoi(const TCHAR *value)
,并使用 TCHAR
编码,因此它既适用于定义了 UNICODE
的情况,也适用于未定义的情况。
可能可以用更聪明、更快速的方法实现,但它有效,如果你喜欢,可以免费使用。
以下是使用该函数的示例小型控制台应用程序的代码,并演示了它的用法。
#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; }
好了,这就是全部内容。你可以从浏览器中复制代码,也可以下载 Visual C++ 6.0 的项目。