独闷闷网

 找回密码
 立即注册
搜索
查看: 2853|回复: 0
打印 上一主题 下一主题
收起左侧

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

[复制链接]
跳转到指定楼层
楼主
发表于 2015-7-24 22:44:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 xiao_yp2014 于 2016-1-21 14:39 编辑

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

用上位发命令来控制下位机,这个是很常用的作法了,但是就数据而言,上位机一般都是以十六进制发送,有的时候需要用的十进制,这个用法是很独特的,比如上机以十六进制发送“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. }
复制代码





乐于分享,勇于质疑!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|独闷闷网 ( 粤ICP备12007667号-2 )

GMT+8, 2024-11-29 18:43 , Processed in 0.166425 second(s), 17 queries .

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