Cómo convertir de matriz de bytes a matriz de palabras en c

Usando c, he definido un byte y una palabra de la siguiente manera:

typedef unsigned char byte; typedef union { byte b[4]; unsigned long w; } word; 

Esto me permite pasar fácilmente de las palabras a los bytes, pero no estoy seguro de una buena manera de ir a la inversa. ¿Es posible hacer algo como la conversión de un byte * a una palabra * o tengo que seguir copiando iterativamente bytes a palabras?

Una de las grandes y terribles cosas de c es que puedes tomar un puntero de vacío y lanzarlo a cualquier cosa. Mientras sepas lo que estás haciendo, funcionará, pero no es algo que quieras adquirir en el hábito.

 const byte input[] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}; unsigned long output[sizeof(input) / sizeof(unsigned long)]; memcpy(output, input, sizeof(input));