Save_Para.Integrated_flux[0]=s_bsPort.txdBuf[39]=(u8)((((water1.Cumulant_Int/10000000000)/10)<<4)|
((water1.Cumulant_Int/10000000000)%10)); //
Save_Para.Integrated_flux[1]=s_bsPort.txdBuf[40]=(u8)((((water1.Cumulant_Int%10000000000)/1000000000)<<4)|
((water1.Cumulant_Int%10000000000/100000000)%10)); ; //
Save_Para.Integrated_flux[2]=s_bsPort.txdBuf[41]=(u8)((((water1.Cumulant_Int%100000000)/10000000)<<4)|
((water1.Cumulant_Int%100000000/1000000)%10));
Save_Para.Integrated_flux[3]=s_bsPort.txdBuf[42]=(u8)((((water1.Cumulant_Int%1000000)/100000)<<4)|
(((water1.Cumulant_Int%1000000)/10000)%10));
Save_Para.Integrated_flux[4]=s_bsPort.txdBuf[43]=(u8)((((water1.Cumulant_Int%10000)/1000)<<4)|(water1.Cumulant_Int%10000/100%10));
我们公司是做水表电表的,以上代码是我写的一部分。
water1.Cumulant_Int表示累积流量。s_bsPort.txdBuf是发送缓冲区,Save_Para.Integrated_flux是用来保存的。
现在还要写把历史数据读出来,就是根据读出来的五个字节把water1.Cumulant_Int恢复出来。
我怎么也想不明白怎么转换。高手支招,谢谢!
此帖出自
小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
你这是把32位压缩BCD变为32位HEX吧。
我这里写了个16位HEX和BCD的互转。你参考一下?
uint16_t BCDTOHEXINT16(uint32_t bcd_data)
{
uint16_t temp;
temp= (0x0f&(bcd_data>>16))*10000;
temp+=(0x0f&(bcd_data>>12))*1000;
temp+=(0x0f&(bcd_data>>8))*100;
temp+=(0x0f&(bcd_data>>4))*10;
temp+= bcd_data&0x0f;
return temp;
}
uint32_t HEX16TOBCD32(uint16_t hex_data)
{
uint32_t bcd_data,temp;
bcd_data=((uint32_t)hex_data)/10000;
bcd_data <<=4;
temp=hex_data%10000;
bcd_data |=((uint32_t)temp)/1000;
bcd_data <<=4;
temp=temp%1000;
bcd_data |=((uint32_t)temp)/100;
bcd_data <<=4;
temp=temp%100;
bcd_data |=((uint32_t)temp)/10;
temp=temp%10;
bcd_data <<=4;
bcd_data |=(uint32_t)temp;
return bcd_data;
}
一周热门 更多>