找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 9796|回复: 1
收起左侧

如何将上位机发送的十六进制数据转换成十进制?已解答?

[复制链接]
ID:69862 发表于 2015-7-24 22:47 | 显示全部楼层 |阅读模式
本帖最后由 xiao_yp2014 于 2016-1-21 14:16 编辑

大家好!我叫肖亚平,从小热爱上了电子技术,读书时阴差阳错的选择了电子这方面的专业,学习电子技术。对于我的理解来说,学校里面学到的技术不是全部实用,但是必须有用,所以一直奋斗在前线。我对学习总结出一句话“压力不是有人努力,而是比你牛X N倍的人依然在努力


如何将上位机发送的十六进制数据转换成十进制

用上位发命令来控制下位机,这个是很常用的作法了,但是就数据而言,上位机一般都是以十六进制发送,有的时候需要用的十进制,这个用法是很独特的,比如上机以十六进制发送“0X10”字节数据,下位就要转换成十进制数据“10”这个转换其实是不符合进制之间的转换的,十六进制的“0X10”转换成十进制是“16”那如何才能将十六进制数据原封不动的转换成十进制呢?
实际应用:比如通过上位机控制单片机去操作某个外设的次数,这个次数是通过上位发送给单片机(十六进制发送),单片机做次数判断用十进制要容易处理,所以要转换。

例子:比如十六进制的“0X10”,转换成十进制是“16”,这里要转换成十进制的“10”,面不是“16”

方法如下:

  1. unsigned int Hex_Conversion(unsigned char ucHexValue)
  2. {
  3.    /*
  4.      例子:比如十六进制的“0X10”,转换成十进制是“16”,这里的“16”和“0X10”中间差6,所以要减去一个“6”
  5.    */
  6.    static unsigned char ucConversionTemp = 0;

  7.    switch(ucHexValue&0xf0)         //用于判断是在那个段之间
  8.    {
  9.               case 0x00:ucConversionTemp = 0;        //不同的段减的值不同,减的值是十六进制与十进制转换差
  10.            break;                                                        //找到相应段,就跳出

  11.            case 0x10:ucConversionTemp = 6;        //不同的段减的值不同,减的值是十六进制与十进制转换差
  12.            break;                                                        //找到相应段,就跳出

  13.            case 0x20:ucConversionTemp = 12;        //不同的段减的值不同,减的值是十六进制与十进制转换差
  14.            break;                                                        //找到相应段,就跳出

  15.            case 0x30:ucConversionTemp = 18;        //不同的段减的值不同,减的值是十六进制与十进制转换差
  16.            break;                                                        //找到相应段,就跳出

  17.            case 0x40:ucConversionTemp = 24;        //不同的段减的值不同,减的值是十六进制与十进制转换差
  18.            break;                                                        //找到相应段,就跳出

  19.            case 0x50:ucConversionTemp = 30;        //不同的段减的值不同,减的值是十六进制与十进制转换差
  20.            break;                                                        //找到相应段,就跳出

  21.            case 0x60:ucConversionTemp = 36;        //不同的段减的值不同,减的值是十六进制与十进制转换差
  22.            break;                                                        //找到相应段,就跳出

  23.            case 0x70:ucConversionTemp = 42;        //不同的段减的值不同,减的值是十六进制与十进制转换差
  24.            break;                                                        //找到相应段,就跳出

  25.            case 0x80:ucConversionTemp = 48;        //不同的段减的值不同,减的值是十六进制与十进制转换差
  26.            break;                                                        //找到相应段,就跳出

  27.            case 0x90:ucConversionTemp = 54;        //不同的段减的值不同,减的值是十六进制与十进制转换差
  28.            break;                                                        //找到相应段,就跳出
  29.    }

  30.    uiConValue = ((unsigned int)(ucHexValue-ucConversionTemp));  //计算转换成十进制数据

  31.    return uiConValue;         //返回十进制数据
  32. }
复制代码





回复

使用道具 举报

ID:432410 发表于 2019-5-13 19:16 | 显示全部楼层
感谢分享,学习了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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