如何在 javascript 中将原始数据转换为 int32
how to convert raw data to int32 in javascript
我从 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中有什么正确的方法吗?
您可以对数字进行位移和求和:
data = [0, 4, -109, -31]
console.log( data[0] << 24 || data[1] << 16 || data[2] << 8 || data[1]);
您需要一个带缓冲区的数据视图并设置字节
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);
我从 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中有什么正确的方法吗?
您可以对数字进行位移和求和:
data = [0, 4, -109, -31]
console.log( data[0] << 24 || data[1] << 16 || data[2] << 8 || data[1]);
您需要一个带缓冲区的数据视图并设置字节
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);