C语言将16进制数转为10进制数
程序分析:
在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进制数相关推荐
- Java 将26进制数据转为10进制、十进制数据转为其它进制
1.十进制数据转为其它进制 /*** 进制转换* @param data 十进制数据* @param radix 待转换的进制* @return 转换后的字符串显示*/private String t ...
- C#16进制数转为10进制有符号数——处理传感器16进制字节流原始数据
原数据是四个字节组成例如 B102 一共16bit,要转化成有符号数,则最大是2^15,范围是(-32768,32768). 转换公式: 1.先转化为10进制trans int xx= Convert ...
- 【python】用python进行进制转换(10进制、2进制、16进制)
进制转换 ① 16进制转10进制 ② 16进制转2进制 ③ 10进制转16进制 ④ 10进制转2进制 ⑤ 2进制转16进制 ⑥ 2进制转10进制 博客由来写在前面:由于计组老师要求我们课后查一下进制转 ...
- ipv6 16进制转成10进制的数
/** * ipv6 16进制转成10进制的数 * @param ip 1:1:2:2:ffff:ffff:ffff:ffff * @returns Array 10进制数的数组 */ ipSrv.p ...
- 16进制数和10进制数之间的转换
1.16进制转10进制数 parseInt(string, radix) 解析一个字符串并返回指定基数的十进制整数,radix 是 2-36 之间的整数,表示被解析字符串的基数. //将10这个字符指 ...
- C语言 将16进制转换成10进制输出
大家好!今天来打印16进制转换成10进制输出,16进制前面是0x.这里以打印ABCDEF的10进制为例 如下: 希望有所启发!!!^__^ 大雨落幽燕,白浪滔天,秦皇岛外打鱼船. ---------- ...
- 进制转换问题---例如把26进制转为10进制
问题:a-z表示0-25,代表26进制,现在要求把该26进制转为10进制 例如: 输入:ba 输出:26 先看如何把十六进制怎么转换成十进制 它可以表示为:2*10^3+0*10^2+3*10^1 ...
- 16进制字符串转10进制数值
16进制字符串转10进制数值 描述 写出一个程序,接受一个十六进制的数,输出该数值的十进制表示. 数据范围:保证结果在 1≤n≤2^31−1 输入描述:输入一个十六进制的数值字符串. 输出描述:输出该 ...
- 数据处理:16进制补码 转换为 10进制数值
此功能仅为各位兄弟姐妹提供算法思路,由于功能简单直接上代码. 1. 16进制数值直接转换10进制 int HexToInt16_Complemwnt(unsigned char* data, int ...
最新文章
- Blender和Substance Painter复古相机创作学习教程
- 今天收到 OCP 证书
- 企业员工工资管理系统
- muduo for v210
- Alios Things的Flash划分规则
- 菲波那契数列(信息学奥赛一本通-T1201)
- AAAI 2020 | 微软亚洲研究院6篇精选论文在家看
- 归纳(四):树链剖分
- mysql mangodb哪个简单,mysql和mongodb学哪个更加容易
- python后台——aiohttp入门
- JavaScript数据类型之String
- 本周ASP.NET英文技术文章推荐[07/22 - 07/28]:VS 2008、.NET 3.5、IronRuby、jQuery、ASP.NET AJAX、IIS7...
- Unity 工具 之 常用的音乐/音频/语音类插件整理(音乐节拍/可视化/语音聊天/文字转语音等)
- 大华相机SDK调用——主动采图、外触发、参数
- 计算机网络基础练习题(附解析,考前必备)
- ubuntu安装词典goldendict
- 元宇宙产业化还很遥远
- 新畅行业商城软件v1.3.9
- iframe父页面与子页面如何传值
- Android模拟器的下载与安装(Windows)
热门文章
- MATLAB泛洪算法,OSPF中的泛洪 – 巴黎高等计算机学院(ESI-SUPINFO)中国校区技术博客...
- 明月镜片开启招股:预计全年业绩增幅不高,和康耐特相比各有优劣
- maven-plugin-shade 详解
- 办公软件-Excel:Excel百科
- RabbitMQ 消息队列入门
- 什么是新零售,新零售的模式又该怎么做?
- python爬取分页数据_爬虫抓取分页数据的简单实现
- 武汉理工大学计算机学院专业排名,2018武汉理工大学专业排名及分数线 王牌专业有哪些...
- Word中批量替换软回车
- 【转载】Apollo修改数据库相关配置不生效的问题