哪位高手帮我看看这段程序,为什么输出的是错误的??

来源:互联网 发布:java租车系统 编辑:程序博客网 时间:2024/04/30 10:18

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

#include "define.h"
#include "lc728e.h"

#include "serial.h"

extern DWORD com_read(BYTE* buf,DWORD buf_len);
extern DWORD com_write(BYTE* buf,DWORD buf_len);

#define _PRG_COLLECT
#define _SGL_COLLECT
#define _DEV_PARA
#define _SAVED_DATA
#define _DATA

void sleep(long time)
{
 int i,j;
 for(i=0;i<10000*time;i++)
  j=j*j;
}

/*******************************************************
/ calculate ECC value
/ return value: ECC value
/******************************************************/
DWORD lc728e_ecc(BYTE* str,BYTE len)
{
 DWORD Val=0;
 int i;
 for(i=0 ; i<len ; i++)
 {
  Val += str[i];
 }
 
    str[len-1]=(BYTE)(Val & 0x000000ff);

 return str[len-1];
}

/*******************************************************
/ parse command string to struct
/ return value:ERR_OK  ERR_FAILED
/******************************************************/
DWORD lc728e_parse(DWORD format,BYTE* str,BYTE*pdata)
{
 BYTE buf[BUFLEN];
    switch(format)
 {
 case LC728E_DATA:
  {
   struct struct_lc728e_data* presult;
   presult=(struct struct_lc728e_data*)str;
   
   if(0XAA!=str[0])
   {
    return ERR_FAILED;
   }

   sprintf (buf,"%02x%02x",str[1],str[2]);
   presult->level=atoi(buf);
   printf("/n%d",presult->level);
   
   sprintf(buf,"%02x%02x%02x",str[3],str[4],str[5]);
   presult->speed=atoi(buf);
   printf("/n%d",presult->speed);

   sprintf(buf,"%02x%02x%02x%02x%02x",str[6],str[7],str[8],str[9],str[10]);
   presult->flux=atof(buf);                                         //00.01.59.63.15
   printf("/n%f",presult->flux);
   
   sprintf(buf,"%02x%02x%02x",str[11],str[12],str[13]);
   sprintf(buf,"%02x",str[14]);                                    //53.35.53.01³ö´í
   presult->run_time=atoi(buf)*60+atoi(buf);
   printf("/n%d",presult->run_time);
   
   sprintf(&buf[0],"20%02x-",str[15]);
   sprintf(&buf[5],"%02x-",str[16]);
   sprintf(&buf[8],"%02x ",str[17]);
   sprintf(&buf[11],"%02x:",str[18]);
   sprintf(&buf[14],"%02x:",str[19]);
   sprintf(&buf[17],"%02x",str[20]);
   strcpy(presult->datetime,buf);                                //2041-23-01 46:76:01
   printf("/n%s",presult->datetime);

   sprintf(buf,"%02x%02x",str[21],str[22]);
   presult->dev_sn=atoi(buf);                                    //3233
   printf("/n%d",presult->dev_sn);
   
   sprintf(buf,"%02x",str[23]);
   presult->mode=atoi(buf);                                      //2
   printf("/n%d",presult->mode);
   
   sprintf(buf,"%02x",str[24]);
      presult->bottle=atoi(buf);                                    //30
   printf("/n%d",presult->bottle);
   
   sprintf(buf,"%02x%02x",str[25],str[26]);
      presult->times=atoi(buf);                                    //3120
   printf("/n%d",presult->times);
   
   sprintf(buf,"%02x",str[27]);
   presult->temperature=atoi(buf);                              //34
   printf("/n%d",presult->temperature);
   
   sprintf(buf,"%02x",str[28]);
   presult->reserve=atoi(buf);                                    //35
   printf("/n%d",presult->reserve);
   
   sprintf(buf,"%02x%02x%02x%02x",str[29],str[30],str[31],str[32]);
   presult->delay_time=atoi(buf);                                     //3
   printf("/n%d",presult->delay_time);

   if (str[33]!=lc728e_ecc(str,33))
   {
    return ERR_ECC;
   }
   break;
  }
  
 case LC728E_DEV_PARA:
  {
      省略
      break;
  }
 }
 return ERR_OK;
}

/*******************************************************
/ build struct to command string
/ return value: ERR_OK  ERR_FAILED  ERR_ECC  ERR_EMPTY
/******************************************************/
DWORD lc728e_build(DWORD format,BYTE* pdata,BYTE* str)
{
 BYTE buf[BUFLEN];
 struct struct_lc728e_prg_collect* ppc;
 struct struct_lc728e_single_collect* psc;
 struct struct_lc728e_dev_para* pdp;
 struct struct_lc728e_seved_data* psd;

 switch(format)
 {
 case LC728E_PRG_COLLECT:
  {
   省略
   break;
  }

 case LC728E_SGL_COLLECT:
  {
   省略
   break; 
  }

 case LC728E_DEV_PARA:
  {
   pdp=(struct struct_lc728e_dev_para*)pdata; 
  
   memset(buf,0,BUFLEN);
   sprintf(buf,"%08d",pdp->delay_time);
   sscanf(buf,"%08X",&str[0]);                            
   
   memset(buf,0,BUFLEN);
   sprintf(buf,"%04d",pdp->bottle_time);
   sscanf(buf,"%04X",&str[4]);                            
   
   memset(buf,0,BUFLEN);
   sprintf(buf,"%02d",pdp->bottle_count);
   sscanf(buf,"%02X",&str[6]);                          
   
   memset(buf,0,BUFLEN);
   sprintf(buf,"%02d",pdp->collect_volume);
   sscanf(buf,"%02X",&str[7]);                            
   
   memset(buf,0,BUFLEN);
   sprintf(buf,"%04d",pdp->times_per_bottle);
   sscanf(buf,"%04X",&str[8]);                            
   
   memset(buf,0,BUFLEN);
   sprintf(buf,"%08d",pdp->reserve1);
   sscanf(buf,"%08X",&str[10]);                        
  
   memset(buf,0,BUFLEN);
   sprintf(buf,"%04d",pdp->speed);
   sscanf(buf,"%04X",&str[14]);                       
   
   memset(buf,0,BUFLEN);
   sprintf(buf,"%02d",pdp->mode);
   sscanf(buf,"%02X",&str[16]);                       
   
   memset(buf,0,BUFLEN);
   sprintf(buf,"%06d",pdp->reserve2[3]);
   sscanf(buf,"%06X",&str[17]);                        
   
   if (str[20]!=lc728e_ecc(str,20))                  
   {
    return ERR_ECC;
   }
   break;
  }

 case LC728E_SAVED_DATA:
  {
  省略
   break;
  }
 }
 return ERR_OK;
}

/******************************************************
/Return value :ERR_OK  ERR_FAILED
/******************************************************/
DWORD lc728e_opt(DWORD format,BYTE* ppara,BYTE* presult)
{
 BYTE buf[BUFLEN];
 DWORD res;
 switch(format)
 {
 case LC728E_PRG_COLLECT:
  {  
   省略
   break;
  }
  
 case LC728E_SGL_COLLECT:
  {
  省略
   break;
  }
  
 case LC728E_DEV_PARA:
  {
   memcpy(ppara,"/x6C/x66/x66",3);
   com_write(ppara,3);
   sleep(1000);
   com_read(buf,BUFLEN);
   
#ifdef _DEV_PARA 
   memcpy(buf,"/xC9/x11/x00/x45/x31/x01/x21/x05/x02/x02/x04/x00/x00/x20/x01/x04/x14/x05/x11/x00/x87",21);
#endif
   
   res=lc728e_parse(LC728E_DEV_PARA,buf,presult);
   
   if(ERR_OK==res)    
       com_write(buf,"/x1E");
   else
       com_write(buf,"/x45");
  break;
  }
  
 case LC728E_SAVED_DATA:
  {
   省略  
   break;
  }
  return ERR_OK;
 }
}

void main()
{
    DWORD result1;
    BYTE str1[1024];
 struct struct_lc728e_data str_result1;
 result1=lc728e_opt(LC728E_SAVED_DATA,(BYTE*)&str_result1,str1);
 getchar();
 
}

正确的输出为:
3100
7800
1596315.000000
61
2000-23-01  45:76:01
1
8
1
2320
33
0
2111

错误的输出为:
3100
7800
1596315.000000
1342
2041-23-01 45:76:01
3233
2
30
3120
34
35
3


在下无能,急需帮助!!!那位高人指点,请教,万分感谢!