你好亲爱的群体智能,
我目前的私人项目之一是物联网领域,特别是LoRaWan和TTN。为了便于数据处理,我决定使用 node-red,这是一个基于 node-js 的流工具来处理接收到的数据。 这是我第一次接触javascript世界(除了少量阅读;))。问题是这样的:
我正在传输一个 C 样式int16_t
有符号类型,该类型通过 ttn 分为两个 8 位半字节。在接收站点上,我想再次将这两个半字节合并为有符号的 16 位类型。那么问题在于javascript只支持32位交互器,这意味着只需通过这样的按位操作合并它们:
newMsg.payload=(msg.payload[1]<<8)|(msg.payload[0]);
我丢失了有符号的信息,只得到了数据的无符号解释,因为它没有存储在 32 位二进制补码中。 由于我还不完全熟悉javascript"标准库",这对我来说似乎是一个难题! 任何帮助将不胜感激
var unsignedValue = (msg.payload[1] << 8) | (msg.payload[0]);
if (result & 0x8000) {
// If the sign bit is set, then set the two first bytes in the result to 0xff.
newMsg.payload = unsignedValue | 0xffff0000;
} else {
// If the sign bit is not set, then the result is the same as the unsigned value.
newMsg.payload = unsignedValue;
}
请注意,这仍将值存储为有符号的 32 位整数,但具有正确的值。