16进制转10进制

更新时间:2023-01-02 01:36:29 阅读: 评论:0


2023年1月2日发(作者:宁波英语口语培训)

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 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图