课题:6个字节的时间格式压缩成4个字节
如果对union嵌套struct 不熟悉可以先看://www.greatytc.com/p/98df529d09a8
1) 4个字节的时间存储格式
union dt_
{
BYTE by4[4];
DWORD dwValue;
struct dt_bit
{//月份:最多是12,1100B只要4位就够了,
//日: 最多31, 1 1111B只要5位就够了
BYTE bDayH2 : 2; //日: 高两位
BYTE Year : 6;
BYTE bDayL3 : 3; //日: 低三位
BYTE Hour : 5;
BYTE bMonthH2 : 2; //月: 高两位
BYTE Minute : 6;
BYTE bMonthL2 : 2; //月: 低两位
BYTE Second : 6;
}bits;
};
2) 6个字节的时间存储格式
struct datetime
{
BYTE Year; /* 相对于2015(DCF_YEAR_BEGIN)的减量 */
BYTE Month;
BYTE Day;
BYTE Hour;
BYTE Minute;
BYTE Second;
};
void datetime_CT(dt_* dt, struct datetime tms)
{
dt.dwValue = 0;
dt.bits.Year = dt.Year;
dt.bits.Hour = dt.Hour; //dt.Day = 31
dt.bits.Minute = dt.Minute;//dt.Day & 0x7: 1 1111B
dt.bits.Second = dt.Second;// & 0 0111B
// -----------
dt.bits.bDayH2 = (dt.Day >> 3);// 0 0111B
dt.bits.bDayL3 = (dt.Day & 0x7);
dt.bits.bMonthH2 = (dt.Month >> 2);
dt.bits.bMonthL2 = (dt.Month & 0x3);
}
void main()
{
struct datetime tms = {2018 - 2015, 7, 24, 14, 39, 54};
dt_ *dt = malloc(sizeof(dt_));
datetime_CT(dt, tms);
}