在 Node-Red 中将位转换为字节
Convert Bits to Bytes in 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,
在 1: 1,
in2: 0,
在 3: 0,
在 4: 0,
在5:1,
in6: 0,
in7: 0,
输出字节将是:00100001 二进制转换为字节是 33
有什么建议吗?
提前致谢。
以下代码按您的要求工作*:
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 变量的顺序颠倒。
*结果不是一个字节,但它确实包含我认为您期望的数字。
我是 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, 在 1: 1, in2: 0, 在 3: 0, 在 4: 0, 在5:1, in6: 0, in7: 0,
输出字节将是:00100001 二进制转换为字节是 33
有什么建议吗?
提前致谢。
以下代码按您的要求工作*:
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 变量的顺序颠倒。
*结果不是一个字节,但它确实包含我认为您期望的数字。