c语⾔(编程题:⼗六进制数转换为⼗进制)
C语⾔
题⽬
写⼀个函数,输⼊⼀个⼗六进制数,输出相应的⼗进制数。
基础知识
1.⼗六进制定义
-------16进制即逢16进1,每⼀位上可以是从⼩到⼤为0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F共16个⼤⼩不同的数。
16进制转换即16进制与其他不同进制之间的换算转换,常见如2进制、8进制、10进制等进制。
且16进制的标准表⽰⼀般为0x后跟数字
2.⼗六进制转换:
-------⼗六进制转换有16进制每⼀位上可以是从⼩到⼤为0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F16个⼤⼩不同的数,
即逢16进1,其中⽤A,B,C,D,E,F(字母不区分⼤⼩写)这六个字母来分别表⽰10,11,12,13,14,15。
3.各种进制对照表:
分析题⽬
⾸先明⽩16进制如何通过计算转换为10进制。
--------16进制数的第0位的权值为16的0次⽅,第1位的权值为16的1次⽅,第2位的权值为16的2次⽅……所以,在第N(N从0开始)位
上,如果是是数X(X⼤于等于0,并且X⼩于等于15,即:F)表⽰的⼤⼩为X*16的N次⽅。
举例:将0x2AF5换算成10进制
5*16^0+F*16^1+A*16^2+2*16^3=10997
编程解决
将问题分析过后我们知道了两种进制转换的原理,也会进⾏进制转换的计算,现在我们需要把这些数学思想转换为编程语⾔。
并且在进制转换的编程中有许多⼩问题⼀下将会做出详解。
1.先定义编写函数的名称:
intGet_0x(constchar*str)//将函数命名为Get_0x并且形参为不可修改的字符串
2.进制转换函数⽤到的头⽂件:
#include
#include
#include
#include
3.如果遇到空格的处理:
while(isspace(*str))
{
str++;//因为空格在转换过程中对数值没有影响,直接++后移进⾏后续操作
}
4.正负号的判断及解决⽅法:
intindex=1;
if(*str=='-'||*str=='+')
{
if(*str=='-')
{
index*=-1;
}
el
{
index=1;
}
str++;
}
5.判断前两位是否是0X16进制的表达形式:
if((*str=='0')&&(*(str+1)=='x'||*(str+1)=='X'))//判断前两位是否是0X16进制的表达形式
{
str+=2;//如果是从第三位开始换算计算
}
el
{
returnINT_MAX;
}
6.判断是否是字符:
while(isxdigit(*str))//判断是否是字符
{
if(isdigit(*str))//如果是字符按位进⾏操作这部分就是将数学思想转变为编程语⾔
{
sum=sum*16+(*str-'0');
}
elif(islower(*str))
{
sum=sum*16+(*str-'a'+10);
}
el
{
sum=sum*16+(*str-'A'+10);
}
str++;
}
7.结束标志:
if(*str=='0')
returnsum*index;
returnINT_MAX;
上述就是进制转换各部分的代码及其实现的功能。
全部代码
#include
#include
#include
#include
intGet_0x(constchar*str)
{
intsum=0;
while(isspace(*str))
{
str++;
}
//此时空格处理结束
intindex=1;
if(*str=='-'||*str=='+')
{
if(*str=='-')
{
index*=-1;
}
el
{
index=1;
}
str++;
}
if((*str=='0')&&(*(str+1)=='x'||*(str+1)=='X'))//判断前两位是否是0X16进制的表达形式
{
str+=2;//如果是从第三位开始换算计算
}
el
{
returnINT_MAX;
}
while(isxdigit(*str))//判断是否是字符
{
if(isdigit(*str))
{
sum=sum*16+(*str-'0');
}
elif(islower(*str))
{
sum=sum*16+(*str-'a'+10);
}
el
{
sum=sum*16+(*str-'A'+10);
}
str++;
}
if(*str=='0')
returnsum*index;
returnINT_MAX;
}
intmain()
{
printf("%dn",Get_0x("0x123ABcW"));
printf("%dn",Get_0x("0X123ABc"));
printf("%dn",Get_0x("0X123ABc"));
printf("%dn",Get_0x("0x123ABc"));//对空格判断
printf("%dn",Get_0x("+0x123ABc"));//+判断
printf("%dn",Get_0x("-0x123ABc"));//-判断
printf("%dn",Get_0x("+0x123ABc"));//+和空格判断
printf("%dn",Get_0x("-0x123ABc"));//-和空格判断
printf("%dn",Get_0x("0x2AF5"));//对上述举例进⾏验证
}
验证结果
(⼩⽩⼀位,如有问题,欢迎各位⼤佬指正)
本文发布于:2023-01-02 01:36:29,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/90/75642.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |