Конечно, просто прибегайте к бинарным операциям. Следующая функция должна делать именно то, что вы хотите, но с простым интерфейсом:
char set8 (char ch, int index) {
if (index >= 1 && index <= 8) {
return (char)(ch | (1 << index - 1));
}
return ch;
}
int n = 0;
set8(n, 1); // Returns 1
set8(n, 2); // Returns 2
set8(n, 3); // Returns 4
...
set8(n, 9); // Returns n (0)
Функция использует побитовое ИЛИ для переключения указанного бита. Если указанный индекс находится вне диапазона байта (8 бит), он просто возвращает переданный символ.