如何将 4 字节 uint8 数组重建为 uint32 整数

How to reconstruct a 4 byte uint8 array into a uint32 integer

我有一个网络应用程序 (javascript) 需要向 arduino(ESP32) 发送一个 12 位值 (0x7DF)。 我有一个只接受 Uint8_t 负载的 websocket 连接,所以我将该值拆分为 4 个字节 (Uint8_t)。 我可以将数组发送到 arduino,但我如何将它重建回 32 位值?

这是我用来将其转换为字节的代码:

const uInt32ToBytes = (input) => {
  const buffer = Buffer.alloc(4)
  buffer.writeUInt32BE(input, 0)
  return [
    buffer[0],
    buffer[1],
    buffer[2],
    buffer[3]
  ]
}

//With an input of 0x7DF i get an output of [0, 0, 7, 223]

我尝试了其他问题中给出的很多选项,但 none 有效。这是他们的建议:

uint32_t convertTo32(uint8_t * id) {
  uint32_t bigvar = (id[0] << 24) + (id[1] << 16) + (id[2] << 8) + (id[3]);
  return bigvar;
}
//This returns an output of 0. 

感谢任何帮助 编辑:我的转换函数有一个测试变体而不是原始解决方案。修复了。

在 Arduino 上,ints 是 16 位的,所以 id[0] << 24(将 id[0]uint8_t 提升到 int)是未定义的(并且不会'无论如何都能够保持该值,使其始终为 0)。

您需要事先进行一些转换:

return (static_cast<uint32_t>(id[0]) << 24)
     | (static_cast<uint32_t>(id[1]) << 16)
     | (static_cast<uint32_t>(id[2]) << 8)
     | (static_cast<uint32_t>(id[3]));