Боже упаси, не хотел я вас обидеть http://www.embedded.com/story/OEG20011220S0064
в указал на корень ваших заблуждений.
Когда вы объявлете тип
union
{
BYTE b[2];
short si;
};
то в байте b[1] хранится старший байт si только для архитектур с little endian порядком байт в слове (пример - любимые x86),
на некоторых других архитуктурах (PowerPC и моторолки 68K), а также в протоколах (Modbus, например), принят иной, big endian, порядок байт в слове.
За подробностями и картинками обратитесь к ссылке.