c - 使用 C 程序将输入数据的十六进制转换为整数

标签 c int hex

我正在尝试使用 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 程序将输入数据的十六进制转换为整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31785131/

相关文章:

C - 读取一串数字

java - 如何检查 int 是否为偶数

c - 有符号的十六进制除以十进制

objective-c - 将 NSString 转换为字符数组

c - 如何在 C 中实现 Go 的 defer() 以便允许声明变量?

c++ - 静态局部变量的 C 与 C++ 初始化

c++ - int 返回垃圾值

Perl - 将十六进制转换为二进制并将其用作字符串

c - 如何动态增加数组大小

C:\Program Files(x86)\Windows Kits\8.1\Include\um\dbghelp.h(1545):错误C2220:警告被视为错误 - 未生成 'object'文件