如何将 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 上,int
s 是 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]));
我有一个网络应用程序 (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 上,int
s 是 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]));