Javascript / 节点功能节点:比特流操作

Javascript / Nodered function node: bitstream operations

完成以下任务:

有一个协议定义了极简数据,例如:

binary     0 1 0 0 0 1 1 1 0 0 1 1 1 0
variable   [-] [-----] [---] [-------]
name       a      b      c       d

其中参数“a”由 2 位组成,参数“b”由 5 位组成,依此类推。我必须将它们设置为

a=1
b=1
c=6
d=...

所以上面的位缓冲区会自动产生。

这个比特流应该像这样存储在缓冲区中:

let buf = Buffer.alloc(64, 0);

有没有可能实现这个?

有很多方法可以解决这个问题。

  1. 使用像 node-red-contrib-buffer-parser 这样的节点,这将允许您将此作为流程的一部分进行

  2. 在功能节点中做基本的bit shifting。例如

    var a = 1
    var b = 16
    var c = 2
    var d = 10
    
    var answer  = a << 14 | b << 12 | c << 10 | d << 6
    

    然后可以写入 buffer.writeUint16()