C / C ++ - Packing signierte Zeichen in int

Ich muss vier vorzeichenbehaftete Bytes in 32-Bit-Integraltyp packen. dazu bin ich gekommen:

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

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

ist das eine gute lösung Ist es tragbar (nicht im Kommunikationssinn)? gibt es eine fertige lösung, vielleicht steigern?

Das Problem, das mich am meisten beschäftigt, ist die Bitreihenfolge beim Konvertieren negativer Bits von char in int. Ich weiß nicht, was das richtige Verhalten sein soll.

Vielen Dank