程序分析:

在16进制转为10进制时会遇到很多情况:

1. 开头是空格、符号等之后才是 0x 或 0X;

对于第一种情况,我们要先判断是字符,把空格这些去了,从字符开始;对于有‘+’或‘-’ 的我们就把这个符号保留下来,接着去判断他的下一位是不是零,在下一位是不是 ‘x’ 或 ‘X’ ,若是则说明这是一个16进制的数;若不是则返回一个最大值,它就代表我们要判断的值不是16进制数。

2. 在判断是16进制数之后,接下来就要转换了(16进制的1变成10进制就是 1×16 ),因为是16进制它的数中避免不了会出现字母,那么字母要是不在 a-f 或 A-F 要怎么处理,或者遇到了a-f 或 A-F 又要如何将他们在16进制中表示的数值给出呢?

这一步不难,我们知道16进制中a,b,c,d,e,f (A,B,C,D,E,F)分别表示的数为10,11,12,13,14,15, 那么怎么把字母表示为数就是我们需要考虑的,16进制字母-'a'+10(16进制字母-'A'+10)即可得到了他所表示的数字,最后输出结果。

#include<stdio.h>
#include<ctype.h>
int Get_0x(const char *str)
{int sum = 0;while(isspace(*str)){str++;}//此时 空格处理结束int index = 1;if(*str=='-' || *str=='+'){if(*str=='-'){index *= -1;}else{index = 1;}str++;}if((*str=='0') && (*(str+1)=='x'|| *(str+1)=='X')){str+=2;}else{return INT_MAX;}while(isxdigit(*str)){if(isdigit(*str)){sum = sum*16 + (*str-'0'); }else if(islower(*str)){sum = sum*16 + (*str-'a'+10);}else{sum = sum*16 + (*str-'A'+10);}str++;}if(*str == '\0')return sum * index;return INT_MAX;
}
int main()
{printf("%d\n", Get_0x("0x123ABcW"));printf("%d\n", Get_0x("0X123ABc"));printf("%d\n", Get_0x("      0x123ABc"));printf("%d\n", Get_0x("+0x123ABc"));printf("%d\n", Get_0x("-0x123ABc"));printf("%d\n", Get_0x("  +0x123ABc"));printf("%d\n", Get_0x("   -0x123ABc"));return 0;
}

调试结果如下:

C语言将16进制数转为10进制数相关推荐

  1. Java 将26进制数据转为10进制、十进制数据转为其它进制

    1.十进制数据转为其它进制 /*** 进制转换* @param data 十进制数据* @param radix 待转换的进制* @return 转换后的字符串显示*/private String t ...

  2. C#16进制数转为10进制有符号数——处理传感器16进制字节流原始数据

    原数据是四个字节组成例如 B102 一共16bit,要转化成有符号数,则最大是2^15,范围是(-32768,32768). 转换公式: 1.先转化为10进制trans int xx= Convert ...

  3. 【python】用python进行进制转换(10进制、2进制、16进制)

    进制转换 ① 16进制转10进制 ② 16进制转2进制 ③ 10进制转16进制 ④ 10进制转2进制 ⑤ 2进制转16进制 ⑥ 2进制转10进制 博客由来写在前面:由于计组老师要求我们课后查一下进制转 ...

  4. ipv6 16进制转成10进制的数

    /** * ipv6 16进制转成10进制的数 * @param ip 1:1:2:2:ffff:ffff:ffff:ffff * @returns Array 10进制数的数组 */ ipSrv.p ...

  5. 16进制数和10进制数之间的转换

    1.16进制转10进制数 parseInt(string, radix) 解析一个字符串并返回指定基数的十进制整数,radix 是 2-36 之间的整数,表示被解析字符串的基数. //将10这个字符指 ...

  6. C语言 将16进制转换成10进制输出

    大家好!今天来打印16进制转换成10进制输出,16进制前面是0x.这里以打印ABCDEF的10进制为例 如下: 希望有所启发!!!^__^ 大雨落幽燕,白浪滔天,秦皇岛外打鱼船. ---------- ...

  7. 进制转换问题---例如把26进制转为10进制

    问题:a-z表示0-25,代表26进制,现在要求把该26进制转为10进制   例如: 输入:ba 输出:26 先看如何把十六进制怎么转换成十进制 它可以表示为:2*10^3+0*10^2+3*10^1 ...

  8. 16进制字符串转10进制数值

    16进制字符串转10进制数值 描述 写出一个程序,接受一个十六进制的数,输出该数值的十进制表示. 数据范围:保证结果在 1≤n≤2^31−1 输入描述:输入一个十六进制的数值字符串. 输出描述:输出该 ...

  9. 数据处理:16进制补码 转换为 10进制数值

    此功能仅为各位兄弟姐妹提供算法思路,由于功能简单直接上代码. 1. 16进制数值直接转换10进制 int HexToInt16_Complemwnt(unsigned char* data, int ...

最新文章

  1. Blender和Substance Painter复古相机创作学习教程
  2. 今天收到 OCP 证书
  3. 企业员工工资管理系统
  4. muduo for v210
  5. Alios Things的Flash划分规则
  6. 菲波那契数列(信息学奥赛一本通-T1201)
  7. AAAI 2020 | 微软亚洲研究院6篇精选论文在家看
  8. 归纳(四):树链剖分
  9. mysql mangodb哪个简单,mysql和mongodb学哪个更加容易
  10. python后台——aiohttp入门
  11. JavaScript数据类型之String
  12. 本周ASP.NET英文技术文章推荐[07/22 - 07/28]:VS 2008、.NET 3.5、IronRuby、jQuery、ASP.NET AJAX、IIS7...
  13. Unity 工具 之 常用的音乐/音频/语音类插件整理(音乐节拍/可视化/语音聊天/文字转语音等)
  14. 大华相机SDK调用——主动采图、外触发、参数
  15. 计算机网络基础练习题(附解析,考前必备)
  16. ubuntu安装词典goldendict
  17. 元宇宙产业化还很遥远
  18. 新畅行业商城软件v1.3.9
  19. iframe父页面与子页面如何传值
  20. Android模拟器的下载与安装(Windows)

热门文章

  1. MATLAB泛洪算法,OSPF中的泛洪 – 巴黎高等计算机学院(ESI-SUPINFO)中国校区技术博客...
  2. 明月镜片开启招股:预计全年业绩增幅不高,和康耐特相比各有优劣
  3. maven-plugin-shade 详解
  4. 办公软件-Excel:Excel百科
  5. RabbitMQ 消息队列入门
  6. 什么是新零售,新零售的模式又该怎么做?
  7. python爬取分页数据_爬虫抓取分页数据的简单实现
  8. 武汉理工大学计算机学院专业排名,2018武汉理工大学专业排名及分数线 王牌专业有哪些...
  9. Word中批量替换软回车
  10. 【转载】Apollo修改数据库相关配置不生效的问题