node-red将缓冲区转换为值

时间:2017-12-28 10:15:57

标签: node-red

我使用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);

1 个答案:

答案 0 :(得分:0)

首先,你不能只对每个value键进行相同处理,从你给出的第一个是4个字节长的例子开始,但第二个只有1个字节。

这就是为什么getDouble()失败的原因,因为它试图从第二个value读取2个字节并且只有一个。

正如我在评论中所说。 NodeJS中可以处理的最大整数值是32位Int。

修改

看了你之前的问题,我猜测4字节value实际上是一个IP地址所以你应该用readInt8()

将它读成4个单独的字节