ASCII для DOS и Windows
От: Mathew  
Дата: 23.03.05 10:21
Оценка:
Подскажите способ получить по номеру символа в таблице ASCII (DOS) номер символа для Windows.
CharToOem, OemToChar — это не то.
Грубо говоря, если написать программу под DOS, которая выводит символы с кодами с 0 до 255, и аналогичную программу под Windows, то расположение символов в этих таблицах будет отличаться.
В частности, в DOS-таблице после буквы "п" идет псевдографика, и только потом остальные буквы.
В Windows-таблице же все русские буквы идут без перерывов.

Зачем это надо
Я сопровождаю legacy программу для DOS (на clipper'е )
Надо перевести на С декодирование паролей доступа.
А там с отдельными символами производятся арифметические действия — т.е. выполняется (N-<код символа>).
Re: ASCII для DOS и Windows
От: bugmonster Россия  
Дата: 23.03.05 13:18
Оценка:
Здравствуйте, Mathew, Вы писали:

M>Подскажите способ получить по номеру символа в таблице ASCII (DOS) номер символа для Windows.

M>CharToOem, OemToChar — это не то.
M>Грубо говоря, если написать программу под DOS, которая выводит символы с кодами с 0 до 255, и аналогичную программу под Windows, то расположение символов в этих таблицах будет отличаться.
M>В частности, в DOS-таблице после буквы "п" идет псевдографика, и только потом остальные буквы.
M>В Windows-таблице же все русские буквы идут без перерывов.

M>Зачем это надо

M>Я сопровождаю legacy программу для DOS (на clipper'е )
M>Надо перевести на С декодирование паролей доступа.
M>А там с отдельными символами производятся арифметические действия — т.е. выполняется (N-<код символа>).

Я не понал, чем OemToCharA не устраивает?
Под досом пишешь? Сам когда-то извращался , дарю:

void DOStoWIN(unsigned char * ptr, int count)
{
    for(int i=0; i<count; i++)
        if( ptr[i]>=0x80 && ptr[i]<0xB0 )
            ptr[i] += 0x40;
        else
            if( (ptr[i]&0xF0) == 0xE0 )
                ptr[i] += 0x10;
            else
                if(ptr[i]==0xF0)
                    ptr[i] = 0xA8;
                else
                    if(ptr[i]==0xF1)
                        ptr[i] = 0xB8;
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.