网络snmp C API设置值时出现问题

网络snmp C API设置值时出现问题,c,network-programming,snmp,net-snmp,C,Network Programming,Snmp,Net Snmp,以下是相关代码: pdu = snmp_pdu_create(SNMP_MSG_SET); if (snmp_add_var(pdu, oid, oid_len, ASN_INTEGER, "1" ) != 0 ) snmp_perror("failed"); 我收到一个错误“错误的值类型:奇怪的Unicode字符” 在终端中运行此snmpset命令时: snmpset -v 3 -u <user> <ip> <oid> integer 1 sn

以下是相关代码:

pdu = snmp_pdu_create(SNMP_MSG_SET);

if (snmp_add_var(pdu, oid, oid_len, ASN_INTEGER, "1" ) != 0 )
    snmp_perror("failed");
我收到一个错误“错误的值类型:奇怪的Unicode字符”

在终端中运行此snmpset命令时:

snmpset -v 3 -u <user> <ip> <oid> integer 1
snmpset-v3-u整数1

它工作正常,为什么在我的C程序中不工作?

您使用的
snmp\u add\u var
错误。在某种意义上,它相当于
snmpset
,因此您应该传递字符
'i'
,而不是常量
ASN_INTEGER
,后者是为其他目的而设计的

ASN_INTEGER
被定义为
((u_char)0x02)
,因此正是对该参数的解析导致了解码困难


“其他东西”是您可能希望使用的函数,它是
snmp\u pdu\u add\u变量

pdu = snmp_pdu_create(SNMP_MSG_SET);

uint32_t val = 1;
if (snmp_pdu_add_variable(pdu, oid, oid_len, ASN_INTEGER, &val, sizeof(val)) == nullptr)
    snmp_perror("failed");
注意它是如何“类型化”的,而不是将字符串进行词汇转换