代码之家  ›  专栏  ›  技术社区  ›  Federico

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

  •  0
  • Federico  · 技术社区  · 6 年前

    我不熟悉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表示输入位置。

    作为结果,我希望接收一个表示每个单字节组合的字节。

    例如:

    in 0:0, IN1:1, 信息二:0, 输入3:0, 4:0, 5:1, 在6:0中, 7:0,

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

    有什么建议吗?

    事先谢谢。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Gary Ott    6 年前

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

    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 (<<) 以获得每个ON位两个的功率。

    您已经指定在_7中是最重要的位。如果它实际上是最低有效位,则反转in_x变量的顺序。

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