c语言进制转换

今天尝试独自(不看其他人代码)完成c语言16进制转10进制的程序,经过反复找错之后终于完成,很有成就感233

首先上大致思路:16进制相比于10进制的区别只是在于,10进制每10个数进一位,16进制每16个数进一位,既然如此那么一个hex数据的dec形式就是所有非0位各自根据位数乘以16的某个次方并加在一起。A-E分别代表10-15,F为16即进一位。比如25A就是2*16*16+5*16+A(即10)

接下来分步骤:

1)首先因为是转换程序所以默认十六进制数据是已知的,那么我们将其放入一个字符数组中方便处理,我随便选了一个4字节hex“0000079B”。接下来需要对数组进行一个逐位遍历,是0则跳过,其余则转为整数。【这里一定要注意数组中的数字亦是字符形式,需要进行一个(int)的强制转换,而且c语言中转换char得到的int和char本身的数字是不一样的,而是这个字符所代表的的ASCII编码,所以转完后需要进行一个。之前写python写多了一时没想起来,以为int('0')就是0了】

 

 

2)将当前位的char转为int之后需要计算到底要乘16的几次方。我用的逻辑是index*Power(16, 7-i),其中index为上一步转换成int后的整数,i为目前处理的数字在数组中的下标(代表位数)7-i是因为我默认的hex有8位,7-i可以表示它是倒数第几位。Power是我另外写的进行次方运算的函数,这样可读性会好一些。接下来就是计算了,倒数第二位就是乘以16,倒数第三位是乘以16*16,以此类推,,,【倒数第1位和倒数第2位(power=0或1)是特殊情况,我用switch单独写了】

 

最后贴张源码吧,希望可以帮助到一些和我一样的编程新手!

 

 有疑问或者不对的地方欢迎提出和讨论!!

 

posted @ 2021-01-12 05:46  Kotoyou  阅读(437)  评论(0)    收藏  举报