C语言 十六进制整数字符串转十进制整数

您所在的位置:网站首页 c语言的浮点数表示 C语言 十六进制整数字符串转十进制整数

C语言 十六进制整数字符串转十进制整数

#C语言 十六进制整数字符串转十进制整数| 来源: 网络整理| 查看: 265

【问题描述】   给定一个不超过0xFFFFFFFF的正的十六进制数字符串,将它转换为正的十进制数后输出。   注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。 样例输入 FFFF 样例输出 65535

【解决方案】 方案1: 使用C标准库strtol函数。

#include #include int main(void) { char str1[] = "FFFF"; char* endptr = NULL; long data = 0; data = strtol(str1, &endptr, 16); printf("%s\r\n",str1); printf("data=%ld\r\n", data); return 0; }

结果: 在这里插入图片描述 方案2: 自定义函数。

#include //将十六进制的字符串转换成整数 int htoi(char* str) { int n = 0; if (str == NULL) return -1; if (*str == '0' && (*(str + 1) == 'x' || *(str + 1) == 'X')) { str += 2; } while (1) { if (*str >= '0' && *str n = 16 * n + (*str - 'A' + 10); } else if (*str >= 'a' && *str break; } str++; } return n; } int main(void) { char str1[] = "0X1AaF"; int data = 0; data = htoi(str1); printf("%s\r\n",str1); printf("data=%d\r\n", data); return 0; }

注:此函数支持识别0x和0X前缀,以及字符串中可包含大小写。 结果: 在这里插入图片描述

补充: 实现将一个字符串中多个十六进制字符(有空格或其他字符间隔)分别转换成十进制数,并返回成功转换的数量。 样例输入 F1 65 3a 5b 6a1a 样例输出 241 101 58 91 27162

方案1:

#include #include int nhtoi(int* dst, char* src) { char* endptr = NULL; int num = 0; while (1) { if((*src >= '0' && *src = 'a' && *src = 'A' && *src if (num == 0) return -1; else return num; } else { src++; } } } int main(void) { char str1[] = "F1 65 3a 5b 6a1a"; char* endptr = NULL; int data[10] = {0}; int num = 0; num = nhtoi(data, str1); printf("%s\r\n", str1); for (int i = 0; i int num = 0; while (1) { if((*src >= '0' && *src = 'a' && *src = 'A' && *src if (num == 0) return -1; else return num; } else { src++; } } }

结果: 在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3