Puoi utilizzare una maschera e un AND.
Utilizzi una variabile 
unsigned char mask = 0x01
 che ha un unico bit, quello più a destra, a 1. Eseguendo un AND tra la tua stringa di byte 
unsigned char byte = ...
 e la maschera, verifichi se il bit più a destra è uguale a 1: in tal caso, incrementi un contatore.
Fatto ciò, esegui uno shift a sinistra di mask: 
mask = mask << 1
 spostando in tal modo a sinistra la posizione del bit da verificare. Ripeti il tutto finché avrai analizzato tutti bit della stringa.
Una cosa del genere:
unsigned char byte = ...;
unsigned char mask = 0x01;
int count = 0;
do{
    if((byte & mask) != 0)
        count++;
   mask = mask << 1;
}while(mask != 0x00);