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恢复出来。
我怎么也想不明白怎么转换。高手支招,谢谢!
此帖出自
小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
给你写了一段代码仅供参考:
- #include <stdio.h>
- #include <stdint.h>
- uint8_t buf[5] = { 0x12, 0x34, 0x56, 0x78, 0x91 };
- uint64_t convert(uint8_t* buf, int n) {
- uint64_t acc = 0;
- int i;
- uint8_t c;
- for(i=0; i<n; i++) {
- acc *= 100;
- c = buf[i];
- acc += (c >> 4) * 10 + (c & 0x0F);
- }
- return acc;
- }
- int main() {
- printf("%lld
", convert(buf, 5));
- }
复制代码运行结果:1234567891
谢谢!
具体怎么写?请明示
一周热门 更多>