我从modbus获得了这个data = [0, 4, -109, -31]
,我知道这个data = 300001
,但是我不知道如何正确地转换它才能到达那个300001
。我尝试了很多在线找到的方法,但还没有成功。谢谢您的帮助
编辑:据我了解,0
需要移位24
,4
移位16
,-109 (256-109 = 147)
,所以它将是147
,并且需要移位8
和最后一个-31 (256-31 = 225)
我们照原样。快速回顾一下data = [0, 4, 147, 225]
和0 * 2^24 + 4 * 2^16 + 147 * 2^8 + 225 = 300001
现在,这需要加以整理。有没有合适的方法可以在js中完成?
您需要一个带有缓冲区的数据视图并设置字节数
var data = [0, 4, -109, -31]
// Create a data view of a buffer
var view = new DataView(new ArrayBuffer(4));
// set bytes
data.forEach((v, i) => view.setInt8(i, v));
var num = view.getInt32(0);
console.log(num);
您可以对数字进行移位和求和:
data = [0, 4, -109, -31]
console.log( data[0] << 24 || data[1] << 16 || data[2] << 8 || data[1]);