Консольное приложение, Visual C. В консольном приложении хотелось бы на экран вывести данные так, чтобы были буквы, а не закорючки. Кроме того, хотелось бы научиться для этой же цели использовать SetConsoleOutputCP. Попробовал несколько вариантов, но что-то не получается. Лучше всего работает Decode_Win_to_DOS (нашел в интернете), но буквы Ёё воспроизводит неправильно. Ниже - моя программа:
long getfilesize(FILE *hfile) {
long filesize = 0;
if(!fseek(hfile, 0, SEEK_END)) {
filesize = ftell(hfile);
fseek(hfile, 0, SEEK_SET);
}
else {
printf("Can't read file INI\n");
_getch();
exit(1);
}
return(filesize);
}
int get_bittable(unsigned char Data, int nbit, unsigned short Mask, char *strbit) {
int Res = 0, i = 0;
for (i = 0; i < nbit; i++) {
if(Mask & Data) {
Res++;
strcat(strbit,"1");
}
else {
strcat(strbit,"0");
}
Mask >>= 1;
}
return Res;
}
char* Decode_Win_to_DOS(char * str)
{
unsigned char *cstr=str;
for(;*cstr;cstr++)
{
if(*cstr>=240)
*cstr-=16;
else if(*cstr>=192)
*cstr-=64;
else if(*cstr==185)
*cstr=252;
}
return str;
}
void main(int argc, char* argv[]) {
FILE *pfile; // указатель для C
long filesize, i, k;
unsigned char c[2], c1[2], s[9], *p;
char zag[] = "Символ\t\tДвоичное представление\t\tКол-во единиц\n";
printf("%i\n", GetConsoleOutputCP());
if(SetConsoleOutputCP(1251)!=0)
printf("%s", zag);
// CharToOem(zag, zag);
if((pfile = fopen("Знаки.txt", "rb"))==NULL) {
printf("Can't open input file\n");
_getch();
exit(1);
} // if((pfile
filesize = getfilesize(pfile);
p = malloc(filesize);
p[0]='\0';
fread(p, sizeof( char ), filesize , pfile);
for(k = 0; k < filesize; k++) {
s[0] = '\0';
c[0] = '\0';
// c1[0] = '\0';
c1[1] = '\0';
strncat(c, p, 1);
// strncat(c1, c, 1);
// CharToOem(c, c);
if(c[0]>='А'&& c[0]<='п' )
c1[0] = c[0]-64;
if(c[0]>='р'&& c[0]<='я' )
c1[0] = c[0]-16;
i = get_bittable(c[0], 8, 0x80, s);
// printf("%s\t\t\t%s\t\t\t%i\n", Decode_Win_to_DOS(c1), s, i);
printf("%c\t\t\t%s\t\t\t%i\n", c[0], s, i);
p++;
}
fclose(pfile);
_getch();
} //main
Файл Знаки.txt состоит из одной строки в кодировке ANSI:
АаБбВвГгДдЕеЁёЖжЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЪъЫыЬьЭэЮюЯя 1234567890!"№/;%:?*(-).