如何用时间和ID填充缓冲区

时间:2018-04-28 13:58:58

标签: c arrays

这是我的程序的一部分,其中buffUsed = 0buffSize = 10和缓冲区在接收数据时填充,前8个字节用时间和CAN ID填充,其余8个字节填充与CAN帧的数据。有没有简单的方法用时间和ID

填充缓冲区的前8个字节
  buffer = (char *)malloc(buffSize*(16); 
  time_t t = time(NULL);
  struct tm *tm = localtime(&t);                                                                            
  long microTs; 

  long uSec()
  {
   struct timeval start;
   long mtime;
   gettimeofday(&start,NULL);
   mtime = start.tv_sec + start.tv_usec;
   return mtime;
  }

  if((buffer != NULL) && (buffUsed < buffSize))
            {              
                microTs = uSec();
                buffer[0+16*buffUsed] = tm->tm_mday;
                buffer[1+16*buffUsed] = tm->tm_mon +1;
                buffer[2+16*buffUsed] = (tm->tm_year)%100;
                buffer[3+16*buffUsed] = tm->tm_hour;
                buffer[4+16*buffUsed] = tm->tm_min;
                buffer[5+16*buffUsed] = tm->tm_sec;
                buffer[6+16*buffUsed] = microTs;
                buffer[7+16*buffUsed] = frameRd->can_id;

            }

            for(i=8;i<16;i++)
            {
              buffer[i+16*buffUsed] = frameRd->data[i-8];
            }             
           buffUsed++;
           }

1 个答案:

答案 0 :(得分:2)

建议像:

这样的结构
struct timeInUsec
{
    ...
};
struct MYDATA
{
    struct timeInUsec timeFields;
    char ID[8];
};

然后分别指定/分配每个字段。

#define MAX_ENTRIES  10

buffer[ MAX_ENTRIES ][ sizeof struct MYDATA  ];

将是一种声明缓冲区的方法

但是,放在缓冲区中的数据是整数,因此需要一些操作才能适应单字节字段