866-MS-DOS to 1251-MS-Windows - C (СИ)
Формулировка задачи:
"Программа предназначена для перекодировки текстовых файлов из формата кодовой таблицы 866-MS-DOS в формат кодовой таблицы 1251-MS-Windows и наоборот. Пользователь сам выбирает текстовый файл и направление перекодировки."
Уважаемые обитатели форума, прошу объяснить в общих чертах, как это сделать. Совсем ничего на ум не приходит.
Извините.
Решение задачи: «866-MS-DOS to 1251-MS-Windows»
textual
Листинг программы
char *K866to1251(char *p)
{ char c, *q=p;
if (p==NULL) return NULL;
while((c=*p)!='\0') {
if (c>=128 && c<176) c+=64;
else if (c>=224 && c<240) c+=16;
*p = c;
p++;
}
return q;
}
// *******************
char *K1251to866(char *p)
{ char c, *q = p;
while((c=*p)!='\0') {
if (c>=192 && c<240) c-=64;
else if (c>=240) c-=16;
else if (c==184) c = 'е';
*p = c;
p++;
}
return q;
}
// ******************
Объяснение кода листинга программы
В представленном коде происходит преобразование символов из одной кодировки в другую.
- Функция
K866to1251принимает указатель на строку в кодировке 866-MS-DOS и возвращает указатель на преобразованную строку в кодировке 1251-MS-Windows. - Функция
K1251to866принимает указатель на строку в кодировке 1251-MS-Windows и возвращает указатель на преобразованную строку в кодировке 866-MS-DOS. - Преобразование происходит путем прохода по всем символам строки и изменения их значений в соответствии с правилами преобразования.
- В функции
K866to1251символы в диапазоне от 128 до 175 (включительно) увеличиваются на 64, а символы в диапазоне от 224 до 239 (включительно) увеличиваются на 16. - В функции
K1251to866символы в диапазоне от 192 до 239 (включительно) уменьшаются на 64, а символ 240 уменьшается на 16. - Если символ равен 184, то в функции
K1251to866он заменяется на символ 'е'. - Результат преобразования сохраняется в новой строке, начиная с той же позиции, что и исходная строка.
- В конце функции возвращается указатель на начало преобразованной строки.