как конвертировать необработанные данные в int32 в javascript - PullRequest
2 голосов
/ 04 февраля 2020

Я получаю это data = [0, 4, -109, -31] от Modbus, и я знаю это 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?

Ответы [ 2 ]

5 голосов
/ 04 февраля 2020

Вам нужно представление данных с буфером и установить байты

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);
2 голосов
/ 04 февраля 2020

Вы можете сдвинуть биты и сложить свои числа:

data =  [0, 4, -109, -31]

console.log( data[0] << 24 || data[1] << 16 || data[2] << 8 || data[1]);
...