【发布时间】:2017-09-18 12:11:08
【问题描述】:
我正在尝试从主机 Linux 到目标系统进行 SNMP 设置。但是,设置的不是正确的值,而是错误的值。经过一番研究,我做了这张表:
Linux snmp 中十进制值的十六进制表示
0 - 0x80 - 1000 0000 - 0 is converted to 128
1 - 0x40 - 0100 0000 - 1 is converted to 64
2 0x20 - 0010 0000 - 2 is converted to 32
3 0x10 - 0001 0000 - 3 is converted to 16
4 0x08 - 0000 1000 - 4 is converted to 8
5 0x04 - 0000 0100 - 5 is converted to 4
6 0x02 - 0000 0010 - 6 is converted to 2
7 0x01 - 0000 0001 - is converted to 1
目标系统中十进制值的十六进制表示
0 - 0x00 - 0000 0000
1 - 0x01 - 0000 0001
2 0x02 - 0000 0010
3 0x03 - 0000 0011
4 0x04 - 0000 0100
5 0x05 - 0000 0101
6 0x06 - 0000 0110
7 0x07 - 0000 0111
我有两个问题:
- 此问题背后的原因可能是什么?
- 有谁知道如何在 C 程序中将这些 Linux 值转换为正确的目标值?
【问题讨论】:
-
疯狂猜测:按位反转值并得到“1”位的位置,然后减去 1 => 你会得到你的数字。
-
对不起,我不知道你在这里问什么。您能否创建一个minimal reproducible example 来说明您的代码在哪里产生了不正确的结果?
-
你所有的价值观似乎都是正确的。 0x80 是 128 十进制等。那么什么是“错误”?您希望这些值是多少?
-
一个 XY 问题...?
-
你能详细说明一下情况吗?你如何设置这些值?使用 snmpset cli 工具?对象的oid和数据类型是什么?您如何检查设置了哪些值?
标签: c linux snmp data-conversion