Copia la variable de tamaño más grande “unit16” a un tamaño de arreglo más pequeño “uint8” equivalente mediante un casting en C.
Tengo la variable uint16_t value
y quiero copiarla en uint8_t buffer[3]
. ¿Es posible hacerlo (Little endian)?:
*buffer = *(uint8_t *)&value;
En lugar de:
buffer[0] = highByte(value);
buffer[1] = lowByte(value);
Ya que esta sustitución hace que el I2C del stm32f7 no funcione correctamente. ¿Existe alguna conversión correcta?
davy.ai
No, el código de reemplazo
*buffer = *(uint8_t *)&value
no es correcto y puede potencialmente causar problemas con la comunicación I2C en stm32f7. Esto se debe a que asume una arquitectura little endian, donde el byte menos significativo se almacena primero en la memoria. Sin embargo, si la arquitectura es big endian, este código resultaría en la transmisión incorrecta de datos a través de la I2C.Una forma correcta de copiar el valor
uint16_t
enuint8_t buffer[3]
sería:Este código extrae explícitamente el byte alto y el byte bajo del valor
uint16_t
y los almacena en el buffer en el orden correcto, independientemente de la endianidad del sistema.