うーん。
((unsigned long*)a)[0] = l;
や
a[0] = (l >> 24) & 0xFF;
a[1] = (l >> 16) & 0xFF;
a[2] = (l >>  8) & 0xFF;
a[3] = (l    ) & 0xFF;
とは別だと考えていいの?