Tengo una aplicación web (javascript) que necesita enviar un arduino (ESP32) un valor de 12 bits (0x7DF). Tengo una conexión websocket que solo acepta una carga útil Uint8_t, por lo que divido el valor en 4 bytes (Uint8_t). Puedo enviar la matriz al arduino, pero ¿cómo la reconstruyo en un valor de 32 bits?
Este es el código que estoy usando para convertirlo en bytes:
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]He probado muchas opciones dadas en otras preguntas pero ninguna funciona. Esto es lo que sugirieron:
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.Cualquier ayuda es apreciada EDITAR: Mi función de conversión tiene una variante de prueba y no la solución original. arreglado eso
En Arduino, los int son de 16 bits, por lo que id[0] << 24 (que promueve id[0] de uint8_t a int ) no está definido (y no podría mantener el valor de todos modos, por lo que siempre es 0).
Necesitas algunos moldes de antemano:
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]));