Diferença entre memcpy e cópia por atribuição

Struct A
{
   uint16_t len;
   uint8_t  cnt;
   uint8_t  unit;
   uint32_t seq; 
};

Essa estrutura A é serializada em umchar * buf. Se eu quiser desserializar os valores individuais, por exemplo:

uint16_t len = 0;
memcpy(&len, buf, sizeof(len));

ou eu posso apenas fazer

uint16_t len = (uint16_t) buf;

Qual é o melhor ou é o mesmo?

Também para desserializar toda a estrutura, se eu fizer

A tmp;

memcpy(&tmp, buf, sizeof(A));

Isso funcionaria bem ou eu deveria estar preocupado com o preenchimento etc do compilador?

questionAnswers(1)

yourAnswerToTheQuestion