资讯动态

十六进制转十进制C语言代码实现

发布时间:2026/10/13 10:21:01 来源:尧图企业网站定制
本文章主要讲解:将输入的十六进制数转化为十进制数的C语言代码实现过程知识较为基础若有不足请各位多多指教首先给出完整实现代码#includestdio.h #includestdlib.h #includestring.h #includemath.h #define weishu 8 int main() { int a 0; int result 0; int b 0; char hex[weishu]; printf(Please input:);//这里用来引导用户输入一个十六进制数字 again: scanf(%s, hex);//用scanf函数来接收十六进制数字 int len strlen(hex);//此处获取数组hex的字符长度 int len1 len; len len - 1; len1 len1 - 1; int num len1; while (len -1) { if (hex[len] 0 hex[len] 9) hex[len] hex[len] - 0; else if (hex[len] a hex[len] f) hex[len] hex[len] - a 10; else if (hex[len] A hex[len] F) hex[len] hex[len] - A 10; else { printf(Input error,please re-enter:); goto again; } len--; } int x len1 1; if (x % 2 0) { int len2 len1; int x2 0; int x1 x / 2; for (x1 ; x1 0;x1--) { int mid hex[x2]; int mid1 hex[len2]; hex[len2]mid; hex[x2] mid1; x2; len2--; } } else { int len3 len1; int x3 0; int x4 (x 1) / 2; for (x4;x4 0;x4--) { int mid2 hex[x3]; int mid3 hex[len3]; hex[len3] mid2; hex[x3] mid3; x3; len3--; } } while (len1-1) { result result hex[len1] * pow(16, len1); len1--; } printf(Ouput:%d, result);//输出十进制结果 return 0; }一些关于以上代码的相关知识1.十六进制数字的相关知识十六进制数字逢16进1然而如果用纯数字的话在某一位数到达‘ 9 ’的时候下一位如果写成‘10’会产生歧义因此在‘9’之后十六进制数字用字母来表示该位数的数字10 --a或A11 --b或B12 --c或C13 --d或D14 --e或E15 --f或F例如用十六进制数字表示十进制数字 ‘ 31 ’311615则15 --f或F剩下的16进1则用16进制表示为1f或1F2.对于strlen函数例如输入’ 1f ’则此时hex数组中所含字符则为’1’ , ’ f ’ 以及 ‘\0’又由于strlen函数不计算 ‘/0’因此strlen(hex)2;3.十六进制数字存入数组并转化为十进制数字转化代码实现过程#define weishu 8 char hex[weishu]; scanf(%s, hex);//用scanf函数来接收十六进制数字 int len strlen(hex);//此处获取数组hex的字符长度 int len1 len; len len - 1; len1 len1 - 1; while (len -1) { if (hex[len] 0 hex[len] 9) hex[len] hex[len] - 0; else if (hex[len] a hex[len] f) hex[len] hex[len] - a 10; else if (hex[len] A hex[len] F) hex[len] hex[len] - A 10; else { printf(Input error,please re-enter:); goto again; }首先需要知道字符的加减是用对应的ASCII码值进行加减的。通过这一点我们就可以知道当某一位数只在0~9之间时用该位数的字符减去‘0’即可得到十进制的该位数字。然而当某位数是大于9的字母时用常规的减‘0’就不能算出对应的十进制数字了。这时就得用其他方法来进行计算了。else if (hex[len] a hex[len] f) hex[len] hex[len] - a 10; else if (hex[len] A hex[len] F) hex[len] hex[len] - A 10;这里给出了当位数为字母时将其转化为十进制数字的方法减去‘a’或’A’再加10由此就将一个十六进制数字的各位数转化为对应十进制并存入数组了4.数组相关知识数组的编号由0开始,以’ 1f 为例此时数组hex里各编号字符的情况为char hex[8]{‘1’,‘f’,‘\0’,‘\0’,‘\0’,‘\0’,‘\0’,‘\0’} (其余未初始化的值都默认为’\0’)则此时hex[0]‘1’hex[1]‘f’最高编号为1而此时计算的字符长度为2因此将len-1以便能够正确计算5.转化为十进制时转化正常位数顺序方法int x len1 1; if (x % 2 0) { int len2 len1; int x2 0; int x1 x / 2; for (x1 ; x1 0;x1--) { int mid hex[x2]; int mid1 hex[len2]; hex[len2]mid; hex[x2] mid1; x2; len2--; } } else { int len3 len1; int x3 0; int x4 (x 1) / 2; for (x4;x4 0;x4--) { int mid2 hex[x3]; int mid3 hex[len3]; hex[len3] mid2; hex[x3] mid3; x3; len3--; } }这里通过检测输入十六进制数字的位数将其进行倒序并存入数组由此进行后续计算。6.十六进制转十进制相加算法while (len1-1) { result result hex[len1] * pow(16, len1); len1--; } printf(Ouput:%d, result);//输出十进制结果这里通过将对应位数数字乘以16的对应次方将各结果相加相加结果就是对应的十进制结果了

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑