这是我程序的一部分,其中buffUsed = 0
和buffSize = 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++;
}
建议使用如下结构:
struct timeInUsec
{
...
};
struct MYDATA
{
struct timeInUsec timeFields;
char ID[8];
};
然后分别指示/分配每个字段。
#define MAX_ENTRIES 10
buffer[ MAX_ENTRIES ][ sizeof struct MYDATA ];
将是声明缓冲区的一种方法
但是,放置在缓冲区中的数据是整数,因此需要进行一些操作才能适应单字节字段