ビット フィールドを除くすべての型は整数の「バイト」を占有し、sizeof はその数値を返します。unsigned charは 1 "バイト"を占有するため、sizeof(unsigned char) は常に 1 を返します。
しかし、unsigned char は常に「バイト」を埋めますか、それとも CHAR_BITS が「バイト」のビット数よりも少ないか、または UCHAR_MAX が (2 の CHAR_BITS 乗) - 1 より少ない可能性がありますか? unsigned char がそのビット数が許可するすべての値を保持できない場合、unsigned char を使用して他の型をコピーするにはどうすればよいですか?
int src = -1, dest;
size_t i;
for (i = 0; i < sizeof dest; i++) {
((unsigned char *) &dest)[i] = ((unsigned char *) &src)[i];
}