Embalagem assinada C / C ++ char em int

Preciso compactar quatro bytes assinados no tipo integral de 32 bits. isto é o que eu vim para:

int32_t byte(int8_t c) { return (unsigned char)c; }

int pack(char c0, char c1, ...) {
  return byte(c0) | byte(c1) << 8 | ...;
}

esta é uma boa solução? É portátil (não no sentido da comunicação)? existe uma solução pronta, talvez aumentar?

questão que mais me preocupa é a ordem dos bits na conversão de bits negativos de char para int. Não sei qual deve ser o comportamento correto.

obrigado

questionAnswers(6)

yourAnswerToTheQuestion