Вот кусок кода, который выведет тебе hex-коды букв KOI8-R:
for (int i = 0xC0; i < 0x100; i++) printf("0x%X = %c\n", i, i);
Перенаправь stdout проги в файл и смотри его любым viewer'ом.
С 866 проще:
0x80 = А
0x81 = Б
.
0xAF = п
<псевдографика>
0xE0 = р
.
0xEF = я
т.е. более-менее по алфавиту.
Для перекодирования нужно составить таблицу соответствия 866 -> KOI8-R. Достаточно 64 символов (если псевдографика и 'е:' тебе не нужны). Первым в таблице будет код буквы 'А' в KOI8-R, вторым - код буквы 'Б', и т.д. до 'я'.
Вот перекодирующий код:
char c = символ_в_866;
c -= 0x80;
if (c >= 0x30) c -= 0x30; //выкидываем псевдографику
c = таблица_соответствия[c]; //866 -> KOI8-R
Если тебе нужна псевдографика, то таблица будет длиной 128 байт, и строка
if (c >= 0x30)
не нужна.
В натуре есть, чего ж формализовывать пишешь
iconv -fIBM866 -tKOI8-R < file866.txt > fileKOI8.txt
И всего деловто, а то цыклы всякие.
Как правильно заметил пред. товарищ, все эту петрушку и из
проги юзать можна.