Цитата(jorikdima @ Apr 19 2007, 21:28)

Разберитесь с побитовыми операциями и все станет ясно. А так же с макросами с параметром. Это любая книга по С. И это будет лучше и эффективнее, чем кому то стучать пальцами по клаве в попытках объяснения.
Помог Сергей Борщ
как создать удобные макросоы, для обеспечения доступа к отдельным словам и байтам переменных.
Эта тема обчсуждается раза по 2 в месяц, поэтому всем уже просто лень писать в десятый раз одно и то же.
Основных подходов три - через указатель, через юнион и сдвигами.
#define LOW(int) (unsigned char)(*((char*)&(int)+0)) //returns lowbyte
#define HIGH(int) (unsigned char)(*((char*)&(int)+1)) //returns highbyte
typedef unsigned char U8;
union tagDummyUnion
{
int i;
U8 b0;
U8 b1;
} DummyUnion;
DummyUnion MyVar;
MyVar.b0 = 80;
MyVar.b1 = 195;
printf("int value = %d\n", MyVar.i);uint16_t i = 0x1234;
uint8_t b0 = (i >> 0) & 0xFF;// low byte
uint8_t b1 = (i >> 8) & 0xFF; // high byte
i = ((uint16_t)b1 << 8) | b0;аналогично для более длинных типов.