首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 入門

C/C++ 十六進制字串轉整數實作指南

     編輯:C++ 入門

C/C++ 十六進制字串轉整數實作指南

實務上常需將十六進制字串(如 "1A4E")解析為整數。雖有 strtol、sscanf 等庫函數,手寫解析器有助於理解細節與處理特殊格式。

方法一:位移累加法

short int xstrtoshortint(char *str) {
    short int ivalue = 0;
    int ioffset = 0;
    char *ptr = str;
    while (*ptr != '\0') {
        ivalue = ivalue << ioffset; // 首次不位移,之後每次左移 4 bits
        if (*ptr >= '0' && *ptr <= '9')
            ivalue += *ptr - '0';
        else if (*ptr >= 'a' && *ptr <= 'f')
            ivalue += *ptr - 'a' + 10;
        else if (*ptr >= 'A' && *ptr <= 'F')
            ivalue += *ptr - 'A' + 10;
        ptr++;
        ioffset = 4;
    }
    return ivalue;
}

方法二:乘 16 累加法(更直觀)

short int xstrtoshortint(char *str) {
    int len = strlen(str);
    short int ivalue = 0;
    for (int i = 0; i < len; i++) {
        if (str[i] >= '0' && str[i] <= '9')
            ivalue = ivalue * 16 + (str[i] - '0');
        else if (str[i] >= 'a' && str[i] <= 'f')
            ivalue = ivalue * 16 + (str[i] - 'a') + 10;
        else if (str[i] >= 'A' && str[i] <= 'F')
            ivalue = ivalue * 16 + (str[i] - 'A') + 10;
    }
    return ivalue;
}

調用範例

short val = xstrtoshortint("1A4E"); // 得到 0x1A4E (6734)

整數轉十六進制字串

用 sprintf(buf, "%04X", val) 或 std::stringstream 配合 std::hex、std::uppercase、std::setw、std::setfill('0')。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved