xiao_yp2014 发表于 2015-7-24 22:44:02

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

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

如何将上位机发送的十六进制数据转换成十进制
用上位发命令来控制下位机,这个是很常用的作法了,但是就数据而言,上位机一般都是以十六进制发送,有的时候需要用的十进制,这个用法是很独特的,比如上机以十六进制发送“0X10”字节数据,下位就要转换成十进制数据“10”这个转换其实是不符合进制之间的转换的,十六进制的“0X10”转换成十进制是“16”那如何才能将十六进制数据原封不动的转换成十进制呢?实际应用:比如通过上位机控制单片机去操作某个外设的次数,这个次数是通过上位发送给单片机(十六进制发送),单片机做次数判断用十进制要容易处理,所以要转换。
例子:比如十六进制的“0X10”,转换成十进制是“16”,这里要转换成十进制的“10”,面不是“16”
方法如下:unsigned int Hex_Conversion(unsigned char ucHexValue)
{
   /*
   例子:比如十六进制的“0X10”,转换成十进制是“16”,这里的“16”和“0X10”中间差6,所以要减去一个“6”
   */
   static unsigned char ucConversionTemp = 0;
   switch(ucHexValue&0xf0)         //用于判断是在那个段之间
   {
            case 0x00:ucConversionTemp = 0;      //不同的段减的值不同,减的值是十六进制与十进制转换差
         break;                                                      //找到相应段,就跳出
         case 0x10:ucConversionTemp = 6;      //不同的段减的值不同,减的值是十六进制与十进制转换差
         break;                                                      //找到相应段,就跳出
         case 0x20:ucConversionTemp = 12;      //不同的段减的值不同,减的值是十六进制与十进制转换差
         break;                                                      //找到相应段,就跳出
         case 0x30:ucConversionTemp = 18;      //不同的段减的值不同,减的值是十六进制与十进制转换差
         break;                                                      //找到相应段,就跳出
         case 0x40:ucConversionTemp = 24;      //不同的段减的值不同,减的值是十六进制与十进制转换差
         break;                                                      //找到相应段,就跳出
         case 0x50:ucConversionTemp = 30;      //不同的段减的值不同,减的值是十六进制与十进制转换差
         break;                                                      //找到相应段,就跳出
         case 0x60:ucConversionTemp = 36;      //不同的段减的值不同,减的值是十六进制与十进制转换差
         break;                                                      //找到相应段,就跳出
         case 0x70:ucConversionTemp = 42;      //不同的段减的值不同,减的值是十六进制与十进制转换差
         break;                                                      //找到相应段,就跳出
         case 0x80:ucConversionTemp = 48;      //不同的段减的值不同,减的值是十六进制与十进制转换差
         break;                                                      //找到相应段,就跳出
         case 0x90:ucConversionTemp = 54;      //不同的段减的值不同,减的值是十六进制与十进制转换差
         break;                                                      //找到相应段,就跳出
   }
   uiConValue = ((unsigned int)(ucHexValue-ucConversionTemp));//计算转换成十进制数据
   return uiConValue;         //返回十进制数据
}




页: [1]
查看完整版本: 如何将上位机发送的十六进制数据转换成十进制?已解答?