我使用snmp从交换机读取多个64位计数器。我得到存储在缓冲区中的值。但是缓冲区的大小不是预期的8个字节,因此我无法使用&buff.readDoubleBE'来转换它。缓冲区在计数器增加时增长。 以下示例是snmp子树节点的输出(只是前两个对象)
msg : Object
object
host: "192.168.0.11"
name: "SWHAR"
_msgid: "3a45e09a.957c9"
oid: "1.3.6.1.2.1.31.1.1.1.6"
payload: array[33]
[0 … 9]
0: object
oid: "1.3.6.1.2.1.31.1.1.1.6.1"
value: buffer[4]raw
0: 0x0
1: 0xb9
2: 0xda
3: 0x4b
1: object
oid: "1.3.6.1.2.1.31.1.1.1.6.2"
value: buffer[1]raw
0: 0x0
2: object ....cut
任何提示如何将其转换为Counter值? 我使用以下函数将数组分成单独的消息。 我已经尝试过使用' readDoubleBE(0,true)'没有阅读文档到最后;-)它立即停止Docker容器。 如果没有noAssert,我的索引超出范围错误。
function shootMsg(element, index, array) {
node.send ({payload: element.value, topic:'SwMetrics/' + msg.name + '/' + index});
}
msg.payload.forEach(shootMsg);
答案 0 :(得分:0)
首先,你不能只对每个value
键进行相同处理,从你给出的第一个是4个字节长的例子开始,但第二个只有1个字节。
这就是为什么getDouble()
失败的原因,因为它试图从第二个value
读取2个字节并且只有一个。
正如我在评论中所说。 NodeJS中可以处理的最大整数值是32位Int。
修改强>
看了你之前的问题,我猜测4字节value
实际上是一个IP地址所以你应该用readInt8()