搜索
bottom↓
回复: 20

16进制转10进制

[复制链接]

出0入0汤圆

发表于 2012-12-2 16:19:52 | 显示全部楼层 |阅读模式
                    我举个例子,我从P0口得到数据temp=0x11;然后把temp变成10进制,目的是为了输出显示,但是在keil软件里面怎么转换呢?

出0入0汤圆

发表于 2012-12-2 16:36:26 来自手机 | 显示全部楼层
temp = (temp >> 4) * 10 + temp % 16;

出0入0汤圆

发表于 2012-12-2 16:46:50 | 显示全部楼层
没必要转换数据格式,仅仅需要在显示的以十进制显示就可以了。

出0入0汤圆

 楼主| 发表于 2012-12-2 16:58:43 | 显示全部楼层
error_dan 发表于 2012-12-2 16:46
没必要转换数据格式,仅仅需要在显示的以十进制显示就可以了。

但是不能直接给显示模块,还需要加工才能给啊模块显示啊

出0入0汤圆

发表于 2012-12-2 17:14:35 | 显示全部楼层
对啊,0xff和255没有本质区别啊,仅仅是在输出的时候要在百位填2,十位填5,个位填5,这不叫16进制转10进制,进制转换是在一些对不同进制不同处理的时候要做处理,这里仅仅是一个显示的处理。

出0入0汤圆

发表于 2012-12-2 17:34:30 | 显示全部楼层
[sieze=4]这个是16进制转BCD

出0入0汤圆

 楼主| 发表于 2012-12-3 15:47:16 | 显示全部楼层
error_dan 发表于 2012-12-2 17:14
对啊,0xff和255没有本质区别啊,仅仅是在输出的时候要在百位填2,十位填5,个位填5,这不叫16进制转10进制 ...

   这位大哥,你说得,我有点不懂!我先说说我的思路吧,待检测的输出电压通过分压之后输入到ADC0809端口,然后ADC0809转换输出(我定义到P0,此时P0=0x**;)然后在程序中对P0的值处理:temp(十进制)=P0x(5/255) 检测电压与分压的倍数,然后把temp百位各位等分开,再送lcd显示!这里的问题是P0是十六进制,不能按照那个公式进行计算吧!

出0入0汤圆

 楼主| 发表于 2012-12-5 14:09:33 | 显示全部楼层
有人来么

出0入0汤圆

发表于 2012-12-5 14:16:25 | 显示全部楼层
除以1000的商就是千位,
上面的余数再除以100结果就是百位,
上面的余数----十位
上面的余数---个位
------------

出0入0汤圆

 楼主| 发表于 2012-12-5 14:25:13 | 显示全部楼层
fsclub 发表于 2012-12-5 14:16
除以1000的商就是千位,
上面的余数再除以100结果就是百位,
上面的余数----十位

恩,这个我知道,是不是直接用P0乘以一个10进制数得到一个10进制数

出0入0汤圆

 楼主| 发表于 2012-12-5 14:25:41 | 显示全部楼层
xq13799775162 发表于 2012-12-2 16:36
temp = (temp >> 4) * 10 + temp % 16;

不理解啊

出0入0汤圆

发表于 2012-12-5 14:29:12 | 显示全部楼层
chensheng00 发表于 2012-12-5 14:25
恩,这个我知道,是不是直接用P0乘以一个10进制数得到一个10进制数

除以1000的商就是千位,
上面的余数再除以100结果就是百位,
上面的余数----十位
上面的余数---个位

------------
你再理解一下,我认为你没有理解。我已经解决了你的问题,而你又问了一个完全不靠谱的问题。

出0入0汤圆

发表于 2012-12-5 14:41:32 | 显示全部楼层
。。。。。。

出0入0汤圆

发表于 2012-12-5 14:46:16 | 显示全部楼层
胡子大叔已经解答了!~~

出20入70汤圆

发表于 2012-12-5 14:53:35 | 显示全部楼层
呵呵,话说我也经历过这个时期!

出0入0汤圆

发表于 2012-12-5 14:54:28 | 显示全部楼层
qian=temp/1000;
bai=temp/100%10;
shi=temp/10%10;
ge=temp%10;

出0入0汤圆

 楼主| 发表于 2012-12-5 15:07:25 | 显示全部楼层
谢谢,知道啦,

出100入0汤圆

发表于 2012-12-5 15:16:27 | 显示全部楼层
你的问题在于此,0x11赋给了temp,但不代表temp就是十六进制格式的,因为变量在MCU里都是以二进制存储的。由此你在编译器里写"temp = 0x11;"跟“temp = 17”效果是一样的,因为他们都是0b00010001,做运算的时候根本不需要做进制转换,注意是做运算的时候。所以你可以直接用大胡子叔叔的公式,没有任何问题。
如果你是传输数据那就不一样了,假设你要通过串口传输一个十进制(BCD格式)的数,那么你就需要将0x11(0001,0001)转成0x17(0001,0111)之后再发送出去才正确。Understand?

出0入0汤圆

发表于 2012-12-5 15:21:25 | 显示全部楼层
本帖最后由 xieguangye2001 于 2012-12-5 15:24 编辑

这个其实是理解数值存储的问题。所谓16进制转10进制是把一个数的各个位提取出来而已。
比如0xff转10进制 我们可以认为输出得到
1. 0x0255      (转BCD码)
2.数组a[3]={2,5,5}
3.gewei =5
   shiwei=5
   baiwei=2

你将输出用于显示到数码管上,他们的意义上一样的。区别在于存储占的空间和代码运算上使用的方便。


temp = 0xff;
temp =255;
是没区别的。

出100入0汤圆

发表于 2012-12-5 15:22:13 | 显示全部楼层
techbaby 发表于 2012-12-5 14:53
呵呵,话说我也经历过这个时期!

哈哈 是的 学的浅的时候各种不理解,学的深入的时候不需要理解。因为原理就在那边,区别只是脑子里有跟没有。

出0入0汤圆

发表于 2016-10-25 14:59:32 | 显示全部楼层
temp = (temp >> 4) * 10 + temp % 16; 顶一下
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-29 17:51

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表