node-red将缓冲区转换为值

问题描述 投票:0回答:1

我使用snmp从交换机读取多个64位计数器。我得到存储在缓冲区中的值。但是缓冲区的大小不是预期的8个字节,所以我不能使用'buf.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);
node-red
1个回答
0
投票

首先,你不能只对待每个value密钥相同,从你给出的第一个例子是4个字节长,但第二个只有1个字节。

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

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

编辑:

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

© www.soinside.com 2019 - 2024. All rights reserved.