如何将SNMP DateAndTime格式字节数组转换为SNMP++ OctetStr?
将SNMP DateAndTime字节数组转换为SNMP++ OctetStr类型
SNMP的DateAndTime类型对应11字节的结构化字节串,你已经完成了日期的编码工作,只需将这个字节数组直接映射到SNMP++的OctetStr类型即可,注意先修正数组越界的问题:
步骤1:修正编码数组的错误
你提供的示例代码中,数组定义为uint8_t BFF[11];却给BFF[11]赋值(数组下标从0开始,最大下标为10),这会导致越界。正确的编码数组应该是:
// 编码日期:2022-11-10 12:30:15.11 UTC + 01:33 uint8_t BFF[11] = { 22, // 年份后两位(2022→22) 20, // 年份前两位(2022→20) 11, // 月份 10, // 日期 12, // 小时 30, // 分钟 15, // 秒 11, // 十分之一秒 '+', // 时区偏移符号 1, // 时区偏移小时 33 // 时区偏移分钟 };
步骤2:转换为SNMP++ OctetStr类型
SNMP++的OctetStr类支持直接从原始字节数组构造,有两种常用方式:
方式1:直接构造对象
#include <snmp_pp/octet.h> // 传入字节数组和有效长度(11字节) SNMP_pp::OctetStr dateTimeOctet(BFF, sizeof(BFF));
方式2:先创建空对象再赋值
#include <snmp_pp/octet.h> SNMP_pp::OctetStr dateTimeOctet; // 设置字节数据和长度 dateTimeOctet.set_data(BFF, sizeof(BFF));
关键说明
OctetStr是SNMP++专门用于处理SNMP OctetString类型的容器,它不依赖C风格字符串的'\0'终止符,直接使用传入的字节长度来确定有效数据,因此不需要在数组末尾添加'\0'。
内容的提问来源于stack exchange,提问作者DDS
相关产品推荐
相关产品推荐

