Credo debba usare && e nn usarei l'operatore ? : in quelo modo ma cn un assegnazione.

codice:
unsigned char car;

car = buff[i] >= 0x21 && buff[i] < 0x7F ? buff[i] : '.';

printf("%c",car);