【问题标题】:Convert Bits to Bytes in Node-Red在 Node-Red 中将位转换为字节
【发布时间】:2019-04-23 19:12:33
【问题描述】:

我是 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

有什么建议吗?

提前致谢。

【问题讨论】:

  • 请您解释一下,您对输出的期望究竟是什么。
  • 你已经尝试过什么?另外,LSB、MSB、2 的补码二进制中的数据是什么表示形式?

标签: javascript bit-manipulation node-red


【解决方案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 (<<) 来获得每个 on 位的 2 的幂。

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

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

【讨论】:

  • 感谢您的回复,但作为输出,我需要使用 Bit Shift 获得一个字节。这是因为字节将被发送到移位寄存器以启用继电器。
  • 您能否提供更多有关您尝试将数据输入到的系统的要求的详细信息?也许它需要 Uint8 数组中的输入?
  • 获得的字节将通过node-red发送到PLC。所以我需要一个整数。
  • 对不起,我误解了答案。其作品!非常感谢
猜你喜欢
  • 1970-01-01
  • 2021-12-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-07
  • 2015-04-06
  • 2012-07-05
  • 2018-05-06
相关资源
最近更新 更多