转换为int?"/>
如何将负二进制数转换为int?
我想通过节点红色modbus节点从数据源读取数据。范围是-20000到20000,但是该节点无法处理负数,因此我不得不将它们转换为二进制数(DWORD),将它们分为上下两个字,然后将这些字转换回整数。
var low
function dec2bin(dec){
return (dec >>> 0).toString(2);
}
var a = msg.payload
if (a >= 0){
a = dec2bin(a);
a = parseInt(a,2);
} else {
a = dec2bin(a);
a = a.substr(16);
a = parseInt(a,2);
}
low = { payload: a };
return low;
为了可视化,我想使用仪表板节点,但是为此,我需要将2个二进制字符串连接在一起,并将它们转换为int。
问题:
node red将它们转换为qword,因此二进制数1111 1111 1111 1111 1111 1100 0001 1000被视为4.294.966.296,而不是-1000。但是如果我用1石灰填充下一个其余部分,则为:1111 1111 1111 1111 1111 1111 1111 1111 1111 1100 0001 1000推出18446744073709552000
谢谢
回答如下:首先,在功能节点中创建新的msg
对象确实是一个坏习惯,您应该只更新msg.payload
值并传递原始对象。
下一步,最简单的方法是使用缓冲区
例如
var b = Buffer(4)
b.writeUInt32BE(msg.playload)
msg.payload = b.readInt32BE()
return msg;
更多推荐
如何将负二进制数转换为int?
发布评论