首页 > 解决方案 > 在 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

有什么建议么?

提前致谢。

标签: javascriptbit-manipulationnode-red

解决方案


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

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。任何其他都将导致废话。

我使用了左位移运算符 (<<)来获得每个 on 位的 2 的幂。

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

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


推荐阅读