我正在尝试使用C程序将来自端口(存储在缓冲区中)的十六进制数据转换为整数格式。从缓冲区转换之前,我想通过在程序中提供一些输入来测试代码。以下是我从在线来源使用的程序。

#include <stdio.h>
#include <stdlib.h>

int hexToInt(char s[]) {
    int hexdigit, i, inhex, n;
    i=0;

    if(s[i] == '0') {
        ++i;
        if(s[i] == 'x' || s[i] == 'X'){
            ++i;
        }
    }

    n = 0;
    inhex = 1;
    for(; inhex == 1; ++i) {
        if(s[i] >= '0' && s[i] <= '9') {
            hexdigit = s[i] - '0';
        } else if(s[i] >= 'a' && s[i] <= 'f') {
            hexdigit = s[i] - 'a' + 10;
        } else if(s[i] >= 'A' && s[i] <= 'F') {
            hexdigit = s[i] - 'A' + 10;
        } else {
            inhex = 0;
        }

        if(inhex == 1) {
            n = 16 * n + hexdigit;
        }
    }

    return n;
}

int main(int argc, char** argv) {

    char hex[] = "93 BC";
    int digit = hexToInt(hex);
    printf("The Integer is %d", digit);

    return 0;
}


当我运行该程序时,它将十六进制的一个输入转换为整数。但是,如果我必须转换如下所示的十六进制输入数组:

00 00 00 05 00 00 00 01 93 BC C0 06 00 00 00 00         ................
00 28 17 00 FC 26 CC 62 00 00 00 07 00 00 00 01         .(...&.b........
00 00 00 D0 00 E3 37 19 00 00 00 1D 00 00 01 00         ......7.........
AB B6 CD 14 00 11 1F 3C 00 00 00 1D 00 00 00 00         .......<........
00 00 00 02 00 00 00 01 00 00 00 90 00 00 00 01         ................
00 00 05 EE 00 00 00 04 00 00 00 80 F0 92 1C 48         ...........�...H
C2 00 00 0E 0C 30 C7 C7 08 00 45 00 05 DC 32 70         .....0....E...2p
40 00 2D 06 41 C8 2D 3A 4A 01 93 BC C8 EC 01 BB         @.-.A.-:J.......
C1 58 C5 8D 53 88 05 72 46 E6 80 10 00 53 DC 34


那如何将其转换为相应的整数值呢?

最佳答案

“转换十六进制输入数组”,将hexToInt()修改为hexToInt(const char *s, char **endptr),并将其设置为*endptr解析停止的位置。如果没有解析发生,请使用*endptr = s

int main(void) {
  char hex[] = "93 BC";
  char *p = hex;
  while (*p) {
    char *endptr;
    int digit = hexToInt(p, &endptr);
    if (p == endptr) break;
    printf("The Integer is %d", digit);
    p = endptr;
  }
  return 0;
}

关于c - 使用C程序将输入数据从十六进制转换为int,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31785131/

10-12 16:53
查看更多