这是我的程序的一部分,其中buffUsed = 0
和buffSize = 10
和缓冲区在接收数据时填充,前8个字节用时间和CAN ID填充,其余8个字节填充与CAN帧的数据。有没有简单的方法用时间和ID
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++;
}
答案 0 :(得分:2)
建议像:
这样的结构struct timeInUsec
{
...
};
struct MYDATA
{
struct timeInUsec timeFields;
char ID[8];
};
然后分别指定/分配每个字段。
#define MAX_ENTRIES 10
buffer[ MAX_ENTRIES ][ sizeof struct MYDATA ];
将是一种声明缓冲区的方法
但是,放在缓冲区中的数据是整数,因此需要一些操作才能适应单字节字段