求一个十六进制转十进制的函数,谢谢!

[复制链接]
 楼主| gmgmgm 发表于 2009-7-12 22:08 | 显示全部楼层 |阅读模式
刚入门的C语,需要对一个十六进制的数值通过LCD显示出来,不知道怎样直接转换,求哪位大侠给个对一个十六进制数转换成十进制的函数,谢谢。
emailli 发表于 2009-7-13 08:44 | 显示全部楼层

16进制和10进制你不用管他

比方说你的数据是8bit的。<br />变量名&nbsp;u8a<br />你需要的仅仅是拿出百位,十位和个位的数据,所以:<br />百位就是&nbsp;u8a/100<br />十位就是&nbsp;(u8a%100)/10<br />个位就是&nbsp;u8a%10<br /><br />更高进制的数据同理处理。<br /><br /><br /><br />数据是多少和他存储的进制没有关系,你不用过多的关注。<br /><br />一个数据10进制等于100,那么无论他用什么进制表示,他还是10进制的100<br /><br />不会应该换了一个&nbsp;表示方式,就改变他在10进制的时候的大小的<br /><br />
 楼主| gmgmgm 发表于 2009-7-13 09:45 | 显示全部楼层

感谢楼上的,还是有点搞不懂。

比方说一个十六进制的数B5,想要在LCD上转换显示出我们常用的10进制数值为181,应该怎样进行换算?
lifufeng 发表于 2009-7-13 12:43 | 显示全部楼层

定义一个变量,将你的16进制数赋给它,你就当这

这个变量是10进制来处理就行了。
戒指320 发表于 2009-7-18 21:10 | 显示全部楼层

o

如果只是显示的话,那么你查表就可以了<br />像这样建表:<br />0x00------0x17<br />&nbsp;&nbsp;&nbsp;&nbsp;dw&nbsp;0000h,0001h,0002h,0003h,0004h,0005h,0006h,0007h<br />&nbsp;&nbsp;&nbsp;&nbsp;dw&nbsp;0008h,0009h,0010h,0011h,0012h,0013h,0014h,0015h<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dw&nbsp;0016h,0017h,0018h,0019h,0020h,0021h,0022h,0023h<br />查到后&nbsp;去高位和低位分别送lcd_buff就ok了
小李志 发表于 2009-7-18 22:07 | 显示全部楼层

这个都不 自己写

那以后可怎么办啊,春阳说过“最忌讳伸手要饭的人了”
quakegod 发表于 2009-7-19 00:18 | 显示全部楼层

解答关于进制转换的问题

很多人一遇到进制转换就晕,偶这里帮着疏导一下。<br /><br />首先,进制是人为定义的,为了表示数字方便。<br />要明白进制的概念,要先明白无进制数。<br /><br />什么叫无进制数呢,就是到多少都不进位,<br />比如<br />一堆苹果,一个156个,这个156是个十进制数字,而那堆苹果本身就是无进制数,<br />或者计数的时候,<br />1就是画1条线,&nbsp;&nbsp;|<br />2就是两条,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;||<br />10就是10条,&nbsp;&nbsp;&nbsp;&nbsp;||||||||||<br />34就是画34条线。||||||||||||||||||||||||||||||||||<br />1590就是&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;||||||||||||||||.............|||||||||||||||||||||||||<br />你看这个无进制数表示起来多麻烦啊。<br />所以要用有进制的数来表示。<br />还是拿那堆苹果来举例子,不管用什么进制数来表示,那堆苹果还是那么多个,数也还是那么多,不会因为进制的不同影响实质的东西。<br /><br />那么156转化成2进制就是&nbsp;10011100,16进制就是9CH.这都是表示那堆苹果。<br />计算机存储数字是用二进制存储的,但是数字的意义没有变,而偶们人类习惯了10进制,所以要把数字转换成10进制来表示偶们看着才方便。<br />二进制转换成10进制,用加法和DA操作是最快最简单的,没有乘除法。<br />当然,转换完成后,变成了压缩BCD码,也就是变成了10进制。<br /><br />实际上,只有在涉及到与人类交互的时候,才有必要转化成十进制,或者10进制转化成2进制,其他时候,计算机直接用二进制数处理,与人类用10进制进行运算,没有什么本质的区别。<br />
quakegod 发表于 2009-7-19 00:26 | 显示全部楼层

解答关于进制转换的问题,附,转换程序

附一个16位二进制数(也就是4位16进制数)转化为10进制(压缩BCD码)的小程序<br /><br />bintobcd16:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;in,&nbsp;r2,r3&nbsp;(low&nbsp;in&nbsp;r2,&nbsp;high&nbsp;in&nbsp;r3)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;out&nbsp;r4,r5,r6&nbsp;(low&nbsp;in&nbsp;r4,high&nbsp;in&nbsp;r6)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clr&nbsp;&nbsp;a<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;r4,a<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;r5,a<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;r6,a<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;r7,#16<br />bintobcd16re1:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;a,r2<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rlc&nbsp;&nbsp;a<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;r2,a<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;a,r3<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rlc&nbsp;&nbsp;a<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;r3,a<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;a,r4<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addc&nbsp;a,r4<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;da&nbsp;&nbsp;&nbsp;a<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;r4,a<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;a,r5<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addc&nbsp;a,r5<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;da&nbsp;&nbsp;&nbsp;a<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;r5,a<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;a,r6<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addc&nbsp;a,r6<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;da&nbsp;&nbsp;&nbsp;a<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;r6,a<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;djnz&nbsp;r7,bintobcd16re1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ret<br /><br />输出最大为65535,是5位数,所以r6只有低半字节有数据。<br />
quakegod 发表于 2009-7-19 00:30 | 显示全部楼层

解答关于进制转换的问题,附,转换程序,后话

同理,更多位的2进制数进行转换也可以,只不过循环次数曾加而已,<br />有多少位,就进行多少次循环,<br />比如100位二进制数,像2^100,用二进制数表示很容易,1后面100个0嘛<br />用这个程序就能很容易就转换成10进制数。<br />如果用除法的话,不知道什么时候才能算完。<br />
您需要登录后才可以回帖 登录 | 注册

本版积分规则

135

主题

766

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部