c语言 - 如何用时间和 ID 填充缓冲区



这是我程序的一部分,其中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++;
}

建议使用如下结构:

struct timeInUsec
{
...
};
struct MYDATA
{
struct timeInUsec timeFields;
char ID[8];
};

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

#define MAX_ENTRIES  10
buffer[ MAX_ENTRIES ][ sizeof struct MYDATA  ];

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

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

最新更新