【发布时间】:2021-12-08 22:51:08
【问题描述】:
我有一个需要向 arduino(ESP32) 发送 12 位值 (0x7DF) 的网络应用程序 (javascript)。 我有一个只接受 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]
我尝试了很多其他问题中给出的选项,但都没有奏效。这是他们的建议:
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.
感谢任何帮助 编辑:我的转换函数有一个测试变体,而不是原始解决方案。解决了这个问题。
【问题讨论】:
-
您以大端序写入缓冲区,但使用小端序算法重构整数。
-
@Passerby 这应该会产生不正确的结果,但不会产生
0。 -
@passerby 无论哪种方式都返回 0。我在想也许我错了,所以我试着去 LE,但同样的反应。我会在 OP 中改回来
-
我猜他后来提取低位 12 位时得到了
0,因为这就是他想发送给 Arduino 的内容。所以你可能是对的。解决方案就是在 JS 或 C++ 代码中反转索引。 -
他的答案有效,所以我将其标记为最佳答案
标签: javascript c++ uint8t uint32