You can get much better code if you make xrci a bit field. so the entire bit filed region can be accessed word-wise:
#include <stdint.h> struct Xrb { uint16_t xrlen; /* Length of I/O buffer in bytes */ uint16_t xrbc; /* Byte count for transfer */ void * xrloc; /* Pointer to I/O buffer */ uint8_t xrci:8; /* Channel number times 2 for transfer */ uint32_t xrblk:24; /* Random access block number */ uint16_t xrtime; /* Wait time for terminal input */ uint16_t xrmod; /* Modifiers */ }; void test(struct Xrb *XRB) { XRB->xrblk = 5; } Bernd.