将节点红色中的位转换为字节

时间:2018-11-21 08:52:48

标签: javascript bit-manipulation node-red

我是JavaScript的新手,我使用Node-Red从数据库中读取写入内容。

我从数据库收到一个对象,其中包含8个数字输入的状态。 每个输入都用一位表示。

我正在寻找一种将每个位组合成一个字节的方法。

这是我从数据库中收到的对象:

array[1]
  0: object
    idx: 10
    ts: "2018-11-21T06:12:45.000Z"
    in_0: 1
    in_1: 1
    in_2: 1
    in_3: 1
    in_4: 1
    in_5: 1
    in_6: 1
    in_7: 1

in_x代表输入位置。

我想收到一个代表每个单个字节组合的字节。

例如:

in0:0, in1:1 in2:0, in3:0, in4:0, in5:1 in6:0, in7:0,

输出字节将是:00100001二进制,转换为字节为33

有什么建议吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

以下代码根据您的要求工作*:

var output = 
    arr[0].in_0 + 
    (arr[0].in_1 << 1) +
    (arr[0].in_2 << 2) +
    (arr[0].in_3 << 3) +
    (arr[0].in_4 << 4) +
    (arr[0].in_5 << 5) +
    (arr[0].in_6 << 6) +
    (arr[0].in_7 << 7);

此代码假定每个变量只能是1或0。其他任何情况都将导致无意义。

我用Left Bit Shift operator (<<)来获得每个导通位的2的幂。

您已指定in_7为最高有效位。如果它实际上是最低有效位,则反转in_x变量的顺序。

*结果不是字节,但确实包含我认为您期望的数字。