CP56time2a

CP56time2a是101/104规约中定义的时间格式,101和104是电力通信规约的一种,2000年左右进行了修订,现在使用的104规约应该就是2000年的版本。
根据以前下载的一个文档的说明,104规约应该是默认的20xx年了,所以xx是从00-99年,所以7bit能表示00-99就可以了。毕竟一种规约能用一百年,已经了不起了。
附截图:

 


#pragma pack(push, 1)
typedef struct cp56time2a {
u_short msec;
u_char min :6;
u_char res1 :1;
u_char iv :1;
u_char hour :5;
u_char res2 :2;
u_char su :1;
u_char mday :5;
u_char wday :3;
u_char month :4;
u_char res3 :4;
u_char year :7;
u_char res4 :1;
} cp56time2a

#pragma pack(pop)
 

 

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
CP56Time2a是一种时间格式,它通常用于电力系统中的通信协议。以下是一个使用C语言实现CP56Time2a格式的示例代码: ```c #include <stdio.h> #include <stdlib.h> #include <time.h> #define CP56_TIME_LENGTH 7 typedef struct { unsigned short ms; // 毫秒 unsigned char min; // 分钟 unsigned char hour; // 小时 unsigned char day; // 日 unsigned char month; // 月 unsigned short year; // 年 } CP56Time2a; void packCP56Time2a(CP56Time2a* time, unsigned char* buffer) { buffer[0] = (time->ms >> 8) & 0xFF; buffer[1] = time->ms & 0xFF; buffer[2] = time->min; buffer[3] = time->hour; buffer[4] = time->day; buffer[5] = time->month; buffer[6] = (time->year >> 8) & 0xFF; buffer[7] = time->year & 0xFF; } void unpackCP56Time2a(unsigned char* buffer, CP56Time2a* time) { time->ms = (buffer[0] << 8) | buffer[1]; time->min = buffer[2]; time->hour = buffer[3]; time->day = buffer[4]; time->month = buffer[5]; time->year = (buffer[6] << 8) | buffer[7]; } int main() { CP56Time2a time; unsigned char buffer[CP56_TIME_LENGTH]; // 获取当前时间 time_t now = time(NULL); struct tm* tm_time = localtime(&now); // 将当前时间转换为CP56Time2a格式 time.ms = 0; time.min = tm_time->tm_min; time.hour = tm_time->tm_hour; time.day = tm_time->tm_mday; time.month = tm_time->tm_mon + 1; time.year = tm_time->tm_year + 1900; // 打包CP56Time2a格式数据 packCP56Time2a(&time, buffer); // 输出打包结果 printf("Packed CP56Time2a: "); for (int i = 0; i < CP56_TIME_LENGTH; i++) { printf("%02X ", buffer[i]); } printf("\n"); // 解包CP56Time2a格式数据 CP56Time2a unpacked_time; unpackCP56Time2a(buffer, &unpacked_time); // 输出解包结果 printf("Unpacked CP56Time2a: %04d-%02d-%02d %02d:%02d:%02d.%03d\n", unpacked_time.year, unpacked_time.month, unpacked_time.day, unpacked_time.hour, unpacked_time.min, 0, unpacked_time.ms); return 0; } ``` 在这个示例代码中,我们首先定义了一个`CP56Time2a`结构体,它包含了CP56Time2a格式中的所有字段。然后,我们定义了`packCP56Time2a`和`unpackCP56Time2a`函数来将`CP56Time2a`结构体转换为字节数组,以及将字节数组转换为`CP56Time2a`结构体。最后,我们在`main`函数中获取当前时间,将其转换为`CP56Time2a`格式,并打印出打包和解包的结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值