【发布时间】:2017-06-18 20:55:02
【问题描述】:
亲爱的群体智能,你好,
我目前的一个私人项目是在物联网领域,特别是 LoRaWan 和 TTN。为了便于数据处理,我决定使用 node-red,它是一个基于 node-js 的流工具来处理接收到的数据。 这是我第一次接触到 javascript 世界(除了少量阅读;))。问题来了:
我正在通过 ttn 传输分为两个 8 位半字节的 C 样式 int16_t 有符号类型。在接收站点上,我想再次将这两个半字节合并为有符号的 16 位类型。问题是 javascript 只支持 32 位整数,这意味着只需通过像这样的按位操作合并它们:
newMsg.payload=(msg.payload[1]<<8)|(msg.payload[0]);
我丢失了带符号的信息,只得到了数据的无符号解释,因为它没有存储在 32 位二进制补码中。 由于我对javascript“标准库”还不是很熟悉,这对我来说似乎是一个难题! 任何帮助将不胜感激
【问题讨论】:
-
亲爱的群体智能你好, +1 ;)。 js中没有二进制类型。它可以是数字(16 位浮点值或 int)或字符串。
-
您好,谢谢您的回答。有趣的是,js 中有位运算符,所以我想也许还有一种方法可以解释 16 位有符号类型。我希望有一些 perl 式的打包/解包魔法
-
我已经有一段时间没有玩过二进制补码了,但我想看看这里 (stackoverflow.com/questions/9939760/…) 和这里 (developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…)。我认为这会让你朝着正确的方向前进......
-
我觉得这里已经有解决方案了stackoverflow.com/questions/27911677/…
-
Javascript 支持对不大于 4 字节的整数进行按位运算。但是,在处理大数时,知道 Javascript 的 Number 类型实际上是 IEEE754(双精度)会很有帮助。这为您提供了 52 位可用于整数,您可以使用 Math(主要是 pow)来帮助您模拟按位运算。
标签: javascript node.js signed twos-complement 16-bit