[an error occurred while processing this directive]
|
наиболее универсальны на С такие варианты
#define BYTE unsigned char
#define WORD unsigned short
#define HIBYTE(x) (x>>8)
#define LOBYTE(x) (BYTE)x
#define HIWORD(x) (x>>16)
#define LOWORD(x) (WORD)x
этот можно использовать только в правой части выражений, а следующий - и в левой части, напр можно написать LOBYTE(w16)++ или LOBYTE(w16)=b8,
только он зависит от порядка расположения байтов, и для случая с BigEndian, напр С51 keil, поменять местами HI и LO:
#define LOBYTE(x) (*(((BYTE*)&x)))
#define HIBYTE(x) (*(((BYTE*)&x)+1))
#define LOWORD(x) (*(((WORD*)&x)))
#define HIWORD(x) (*(((WORD*)&x)+1))
причем в обоих случаях запись типа
b8 = LOBYTE(LOWORD(dw32))
всеми известными мне компиляторами транслировалась в передачу одного байта
E-mail: info@telesys.ru