这个字节转换回不去了

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条回答
lcofjp
1楼-- · 2019-03-23 21:19
/ 你的数太大了,不在32位整数范围内了,默认整形是处理不了的。
chenbingjy
2楼-- · 2019-03-23 22:51
 精彩回答 2  元偷偷看……
lcofjp
3楼-- · 2019-03-24 04:06
本帖最后由 lcofjp 于 2017-9-19 17:21 编辑

给你写了一段代码仅供参考:
  1. #include <stdio.h>
  2. #include <stdint.h>

  3. uint8_t buf[5] = { 0x12, 0x34, 0x56, 0x78, 0x91 };

  4. uint64_t convert(uint8_t* buf, int n) {
  5.         uint64_t acc = 0;
  6.         int i;
  7.         uint8_t c;
  8.         for(i=0; i<n; i++) {
  9.                 acc *= 100;
  10.                 c = buf[i];
  11.                 acc += (c >> 4) * 10 + (c & 0x0F);
  12.         }
  13.         return acc;
  14. }

  15. int main() {
  16.         printf("%lld ", convert(buf, 5));
  17. }
复制代码
运行结果:1234567891
chenbingjy
4楼-- · 2019-03-24 07:40
lcofjp 发表于 2017-9-19 17:18
给你写了一段代码仅供参考:[code]#include
#include

uint8_t buf[5] = { 0x12, 0x34, ...

谢谢!
Li_Lei
5楼-- · 2019-03-24 09:51
 精彩回答 2  元偷偷看……
chenbingjy
6楼-- · 2019-03-24 13:05
huo_hu 发表于 2017-9-20 10:19
用结构指针

具体怎么写?请明示

一周热门 更多>