* CP56Time2A时间格式
![](https://img2023.cnblogs.com/blog/2776504/202312/2776504-20231212181427265-1967855763.png)
- 该时标格式使用7个字节来表示时间信息,上图的表中体现为——从最左侧8所在的行开始,到下面56所在的行,共7行。每一行表示一个字节,每行从右向左依次是该字节的第一位(最低位)、第二位....第八位(最高位)。
- 该时标格式使用56个二进制数(56bit)存储时间信息,这56个数分别有对应的序号(1-56)。Milliseconds占用了两个字节;尖括号中的0——59999即时间信息中秒的范围是0-59999ms(0.000~59.999s)。
// cp56time2a时间格式
typedef union
{
// 低7字节是七个八位位组二进制时间
uint64_t Cp56Time; // uint8_t Cp56Time[7];
struct
{
uint16_t msec;
uint8_t min : 6;
uint8_t res1 : 1;
uint8_t iv : 1;
uint8_t hour : 5;
uint8_t res2 : 2;
uint8_t su : 1;
uint8_t mday : 5;
uint8_t wday : 3;
uint8_t month : 4;
uint8_t res3 : 4;
uint8_t year : 7;
uint8_t res4 : 1;
}Compts;
}Cp56Time2a;
// 本地时间结构体
typedef struct
{
uint8_t year;
uint8_t month;
uint8_t mday;
uint8_t hour;
uint8_t min;
uint16_t msec;
}Time;
#pragma pack(pop)
Time time = {0}; // 定义一个保存时间的结构体
Cp56Time2a cp56time2a = {0}; // 定义一个cp56time2a的结构体
// cp56time2a 转本地时间
static uint64_t Cp56time2aToLocalTime(uint64_t cp56time2atime)
{
printf("\n\t Year : %d \n\r", cp56time2a.Compts.year);
printf("\n\t month : %d \n\r", cp56time2a.Compts.month);
printf("\n\t mday : %d \n\r", cp56time2a.Compts.mday);
printf("\n\t wday : %d \n\r", cp56time2a.Compts.wday);
printf("\n\t hour : %d \n\r", cp56time2a.Compts.hour);
printf("\n\t min : %d \n\r", cp56time2a.Compts.min);
printf("\n\t msec : %d \n\r", cp56time2a.Compts.msec);
return 0;
}
// 本地时间转cp56time2a格式
uint64_t LocalTimeToCp56Time2a(const Time *time)
{
cp56time2a.Compts.year = time->year;
cp56time2a.Compts.month = time->month;
cp56time2a.Compts.mday = time->month;
cp56time2a.Compts.hour = time->hour;
cp56time2a.Compts.min = time->min;
cp56time2a.Compts.msec = time->msec;
return cp56time2a.Cp56Time;
}
int main(void)
{
time.year = 23;
time.month = 12;
time.mday = 12;
time.hour =18;
time.min = 30;
time.msec = 40;
printf("\n\t cp56time2a 0X:%llX \n\r", LocalTimeToCp56Time2a(&time));
return 0;
}
![](https://img2023.cnblogs.com/blog/2776504/202312/2776504-20231213100644438-1009675317.png)