65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.41/5 (15投票s)

2001年1月12日

viewsIcon

454505

downloadIcon

1759

将包含十六进制值的字符串转换为整数

  • 下载演示项目 - 8 Kb
  • 将“十六进制字符串”转换为整数

    有时我有一个包含十六进制值的字符串,例如 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 的项目。

    © . All rights reserved.