打印

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

[复制链接]
7485|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gmgmgm|  楼主 | 2009-7-12 22:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚入门的C语,需要对一个十六进制的数值通过LCD显示出来,不知道怎样直接转换,求哪位大侠给个对一个十六进制数转换成十进制的函数,谢谢。

相关帖子

沙发
emailli| | 2009-7-13 08:44 | 只看该作者

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

比方说你的数据是8bit的。
变量名 u8a
你需要的仅仅是拿出百位,十位和个位的数据,所以:
百位就是 u8a/100
十位就是 (u8a%100)/10
个位就是 u8a%10

更高进制的数据同理处理。



数据是多少和他存储的进制没有关系,你不用过多的关注。

一个数据10进制等于100,那么无论他用什么进制表示,他还是10进制的100

不会应该换了一个 表示方式,就改变他在10进制的时候的大小的

使用特权

评论回复
板凳
gmgmgm|  楼主 | 2009-7-13 09:45 | 只看该作者

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

比方说一个十六进制的数B5,想要在LCD上转换显示出我们常用的10进制数值为181,应该怎样进行换算?

使用特权

评论回复
地板
lifufeng| | 2009-7-13 12:43 | 只看该作者

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

这个变量是10进制来处理就行了。

使用特权

评论回复
5
戒指320| | 2009-7-18 21:10 | 只看该作者

o

如果只是显示的话,那么你查表就可以了
像这样建表:
0x00------0x17
    dw 0000h,0001h,0002h,0003h,0004h,0005h,0006h,0007h
    dw 0008h,0009h,0010h,0011h,0012h,0013h,0014h,0015h
        dw 0016h,0017h,0018h,0019h,0020h,0021h,0022h,0023h
查到后 去高位和低位分别送lcd_buff就ok了

使用特权

评论回复
6
小李志| | 2009-7-18 22:07 | 只看该作者

这个都不 自己写

那以后可怎么办啊,春阳说过“最忌讳伸手要饭的人了”

使用特权

评论回复
7
quakegod| | 2009-7-19 00:18 | 只看该作者

解答关于进制转换的问题

很多人一遇到进制转换就晕,偶这里帮着疏导一下。

首先,进制是人为定义的,为了表示数字方便。
要明白进制的概念,要先明白无进制数。

什么叫无进制数呢,就是到多少都不进位,
比如
一堆苹果,一个156个,这个156是个十进制数字,而那堆苹果本身就是无进制数,
或者计数的时候,
1就是画1条线,  |
2就是两条,     ||
10就是10条,    ||||||||||
34就是画34条线。||||||||||||||||||||||||||||||||||
1590就是        ||||||||||||||||.............|||||||||||||||||||||||||
你看这个无进制数表示起来多麻烦啊。
所以要用有进制的数来表示。
还是拿那堆苹果来举例子,不管用什么进制数来表示,那堆苹果还是那么多个,数也还是那么多,不会因为进制的不同影响实质的东西。

那么156转化成2进制就是 10011100,16进制就是9CH.这都是表示那堆苹果。
计算机存储数字是用二进制存储的,但是数字的意义没有变,而偶们人类习惯了10进制,所以要把数字转换成10进制来表示偶们看着才方便。
二进制转换成10进制,用加法和DA操作是最快最简单的,没有乘除法。
当然,转换完成后,变成了压缩BCD码,也就是变成了10进制。

实际上,只有在涉及到与人类交互的时候,才有必要转化成十进制,或者10进制转化成2进制,其他时候,计算机直接用二进制数处理,与人类用10进制进行运算,没有什么本质的区别。

使用特权

评论回复
8
quakegod| | 2009-7-19 00:26 | 只看该作者

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

附一个16位二进制数(也就是4位16进制数)转化为10进制(压缩BCD码)的小程序

bintobcd16:
        ;in, r2,r3 (low in r2, high in r3)
        ;out r4,r5,r6 (low in r4,high in r6)
        clr  a
        mov  r4,a
        mov  r5,a
        mov  r6,a
        mov  r7,#16
bintobcd16re1:
        mov  a,r2
        rlc  a
        mov  r2,a
        mov  a,r3
        rlc  a
        mov  r3,a
        mov  a,r4
        addc a,r4
        da   a
        mov  r4,a
        mov  a,r5
        addc a,r5
        da   a
        mov  r5,a
        mov  a,r6
        addc a,r6
        da   a
        mov  r6,a
        djnz r7,bintobcd16re1
        ret

输出最大为65535,是5位数,所以r6只有低半字节有数据。

使用特权

评论回复
9
quakegod| | 2009-7-19 00:30 | 只看该作者

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

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

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

135

主题

766

帖子

2

粉丝