Sí, sí, tenés razón (
)
Entonces si quieres imaginar que estás ahorrándote una variable, corrijamos tu código...
LB=*((UINT8*)&ObjectsParameters[k].OUTPUT_VALOR);
HB=*( (UINT8*)&ObjectsParameters[k].OUTPUT_VALOR + 1);
UB=*( (UINT8*)&ObjectsParameters[k].OUTPUT_VALOR + 2);
MB=*( (UINT8*)&ObjectsParameters[k].OUTPUT_VALOR + 3);
Para la segunda línea, una interpretación sería:
- Extrae la dirección RAM de OUTPUT_VALOR.
- Interpreta la dirección RAM como un apuntador a un entero de 1 byte (casting).
- Le suma 1, pero como es apuntador entonces le suma el número de bytes que ocupa la variable. En este caso al ser un byte, pues la suma es dirección RAM + 1.
- El * pide que el contenido de la dirección RAM sea leído y asignado a HB.
Creo que sólo faltaban los ampersands.