如何将上位机发送的十六进制数据转换成十进制?已解答?
本帖最后由 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]