今天写了一个BCD转hex的函数,出现了一下奇怪的问题
//uHex = ((sData>>4)&0x0f)*10 + sData&0x0f;
上面这句话每次执行都会把高4位给去掉了,如0x20转换的结果为0x04,不知道什么原因
换成下面的语句就可以了
uHex = ((sData>>4)&0x0f)*10;
uHex += sData&0x0f;
=================================
函数
unsigned char BcdToHex(unsigned char sData)
{//printf("BcdToHex: \n");
//printf("sData %02X \n",sData);
//unsigned char uTemp;
//uTemp = ((sData>>4)&0x0f)*10;
//printf("uTemp %02X sData&0x0f=%d\n",uTemp,sData&0x0f);
unsigned char uHex;
//uHex = ((sData>>4)&0x0f)*10 + sData&0x0f;
uHex = ((sData>>4)&0x0f)*10;
uHex += sData&0x0f;
//printf("uHex %02X \n",uHex);
return uHex;
}