解释16位2';javascript中的s补码(nodejs)

解释16位2';javascript中的s补码(nodejs),javascript,node.js,signed,twos-complement,16-bit,Javascript,Node.js,Signed,Twos Complement,16 Bit,您好,亲爱的swarm intelligence 我目前的一个私人项目是物联网领域,特别是LoRaWan和TTN。为了便于数据处理,我决定使用node red,这是一个基于node js的流工具来处理接收到的数据。 这是我第一次接触到javascript世界(除了少量阅读;)。问题是: 我正在通过ttn传输一个C风格的int16\t有符号类型,分为两个8位半字节。在接收站点上,我想将这两个半字节再次合并成一个有符号的16位类型。问题是javascript只支持32位整数,这意味着只需通过如下逐位

您好,亲爱的swarm intelligence

我目前的一个私人项目是物联网领域,特别是LoRaWan和TTN。为了便于数据处理,我决定使用node red,这是一个基于node js的流工具来处理接收到的数据。 这是我第一次接触到javascript世界(除了少量阅读;)。问题是:

我正在通过ttn传输一个C风格的
int16\t
有符号类型,分为两个8位半字节。在接收站点上,我想将这两个半字节再次合并成一个有符号的16位类型。问题是javascript只支持32位整数,这意味着只需通过如下逐位操作对其进行mergin:

newMsg.payload=(msg.payload[1]<<8)|(msg.payload[0]);

newMsg.payload=(msg.payload[1]
var unsignedValue=(msg.payload[1]您好亲爱的swarm intelligence,+1;)。js中没有二进制类型。它是一个数字(16位浮点值或int)或者一个字符串。嘿,谢谢你的回答。有趣的是js中有位运算符,所以我想也许还有一种解释16位有符号类型的方法。我希望有一些perl风格的打包/解包magicI已经有一段时间没有使用二的补码了,但我想看看这里()和这里()。我想这会给你带来正确的方向…我认为它已经有了一个解决方案Javascript支持对不大于4字节的整数进行位运算。但是,当处理大数字时,知道Javascript的数字类型实际上是IEEE754(双精度)是很有帮助的。这为整数提供了52位,您可以使用数学(主要是pow)来帮助您模拟逐位运算。您就是这样的人。显而易见的方法在不知不觉中消失了!
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;
}