Js将数字转换为缓冲区数组[4]

时间:2017-03-10 17:30:19

标签: javascript node.js

我想将数值打印到4值[uint32_t]

的数组中

例如255 => [0x00, 0x00, 0x00, 0xFF]

想要将此值从Nodejs服务器发送到Arduino

是否存在任何天然溶解或命题?

1 个答案:

答案 0 :(得分:3)

有很多方法可以做到这一点 - 例如你可以移动数字并将所有位置零,但是8个最不重要的位。

例如:

const conv = num => [
  (num >> 24) & 255,
  (num >> 16) & 255,
  (num >> 8) & 255,
  num & 255,
];

console.log(conv(16));
console.log(conv(255));
console.log(conv(256));
console.log(conv(640));
console.log(conv(32768));

或者,你可以采用一种完全不同的方法,而不是告诉计算机如何精确地移位这些位,你可以告诉它获得一个4字节的缓冲区,存储一个32位的数字并作为一个数组显示给你四个8位数字,使用JavaScript中的新类型数组:

const conv = num => {
  let b = new ArrayBuffer(4);
  new DataView(b).setUint32(0, num);
  return Array.from(new Uint8Array(b));
}

console.log(conv(16));
console.log(conv(255));
console.log(conv(256));
console.log(conv(640));
console.log(conv(32768));

结果是一样的,但这次你不需要知道移位的方法以及如何掩盖它们。这是使用JavaScript的一些新功能。有关详细信息,请参阅:

请注意,这都是使用big-endian格式,如问题中的示例。但请记住,数字也可以用小端格式表示。参见: