Ce que t'as donné darkoli le fait déjà. Et si je poeux ajouter ma patte, je conseillerais ceci :
#define SIZE 8
char buffer[SIZE];
char c = 0;
for (int i=0; i<SIZE; i++) {
c += buffer[SIZE - i] >> i;
}
J'ai utilisé buffer[SIZE - i] plutôt que buffer puisque tu as dit que buffer[0] était le [i]Most Significant Bit.
Par ailleurs en C/C++, il n'y a que très peut de différences entre un char et un int (globalement, leur taille, c'est tout). Donc si tu as le code ASCII, tu as le caractère, c'est simplement une interprétation différente de la même donnée.