Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2342345
  • 博文数量: 816
  • 博客积分: 10000
  • 博客等级: 上将
  • 技术积分: 5010
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-17 17:57
文章分类

全部博文(816)

文章存档

2011年(1)

2008年(815)

分类:

2008-12-17 18:01:37

这是一段接收数据的程序,接受3个通道数据,每个数据共4Byte,第一Byte为通道号,后三个字节代表一个数。我一次性发36个字节即每通道3个数据,但算出来的数data1[3]很大,显示及存储后都被截断,不知该如何处理?
unsigned char Buffer[100]; //接收缓存
unsigned char Buf1[24],Buf2[24],Buf3[24];
int mBuf1=0,mBuf2=0,mBuf3=0;
unsigned long int data1[3],data2[3],data3[3];

int nCount=YbCommDevice1->InQueue->Count;
  Memo2->Lines->Add(IntToStr(nCount));
  int n = YbCommDevice1->Read(Buffer,48); //收到数据的字节数
  if(n>0)
  {
   for(int i=0; i   {
     if(i%4==0)
      switch(Buffer[i])
      {
       case 1: Buf1[mBuf1*4+0]=Buffer[i];
               Buf1[mBuf1*4+1]=Buffer[i+1];
               Buf1[mBuf1*4+2]=Buffer[i+2];
               Buf1[mBuf1*4+3]=Buffer[i+3];
               mBuf1=mBuf1+1;
               break;
       case 2: Buf2[mBuf2*4+0]=Buffer[i];
               Buf2[mBuf2*4+1]=Buffer[i+1];
               Buf2[mBuf2*4+2]=Buffer[i+2];
               Buf2[mBuf2*4+3]=Buffer[i+3];
               mBuf2=mBuf2+1;
               break;
       case 3: Buf3[mBuf3*4+0]=Buffer[i];
               Buf3[mBuf3*4+1]=Buffer[i+1];
               Buf3[mBuf3*4+2]=Buffer[i+2];
               Buf3[mBuf3*4+3]=Buffer[i+3];
               mBuf3=mBuf3+1;
               break;
      }
    data1[0]=Buf1[1]*256^2+Buf1[2]*256+Buf1[3];//
    data1[1]=Buf1[5]*256^2+Buf1[6]*256+Buf1[7];
    data1[2]=Buf1[9]*256^2+Buf1[10]*256+Buf1[11];
   }
 }
现实的数据:14086 26386 32007   4648 30488 20771   19782 14105 33354
发射的数据:(16进制)  01 12 25 04 02 33 21 26 03 58 15 44 01 42 25 10 02 41 36 16 03 72 45 17 01 58 25 05 02 65 34 21 03 92 10 48
你帮看看是哪里出了问题?


--------------------next---------------------

阅读(1159) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~