如何将负二进制数转换为int?

编程入门 行业动态 更新时间:2024-10-08 12:40:01

如何将负二进制数<a href=https://www.elefans.com/category/jswz/34/1771419.html style=转换为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?

本文发布于:2024-05-07 13:30:43,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1756467.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:转换为   如何将   二进制数   int

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!