这个字节转换回不去了

2019-03-23 17:31发布

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恢复出来。
我怎么也想不明白怎么转换。高手支招,谢谢!
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
8条回答
damiaa
2019-03-24 16:18
本帖最后由 damiaa 于 2017-9-20 11:12 编辑

你这是把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;
}

一周热门 更多>