dvv |
Отправлено: 07.02.2006, 11:08 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 43
|
Как узнать код ASCII символа. Должна же быть какая-то функция?
В конце концов для латиницы можно воспользоваться кодом:
char cur_char='a';
int cur_ascii = cur_char;
unsigned int cur_uns_ascii = cur_char;
Но когда таким способом начинаешь преобразовывать русские буквы, то коды получаются отрицательными. Если вместо int использовать unsigned, то коды получаются гигантской величины. Нас в школе учили, что русская буква А имеет код 192, а не -64 и не 4294967232,
Б имеет код 193, а не -63 и не 4294967233.
В чем тут дело и как получить правильные коды? |
|
Guest |
Отправлено: 07.02.2006, 11:17 |
|
Не зарегистрирован
|
QUOTE |
В чем тут дело и как получить правильные коды?
|
Пользоваться unsigned или маскировать (int сивол = cur_char & 0xFF) |
|
dvv |
Отправлено: 07.02.2006, 11:34 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 43
|
int cod = cur_char & 0xFF; // работат
через unsigned не получается.
unsigned un= cur_char; //un=4294967233
Непонятно другое: откуда растут такие сложности? |
|
olegenty |
Отправлено: 07.02.2006, 11:37 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
от того, что char — знаковый. напиши unsigned char — и проблема со знаком пропадёт. но появятся другие
|
|
Grigoriy |
Отправлено: 07.02.2006, 18:59 |
|
Мастер участка
Группа: Участник
Сообщений: 381
|
Да, я проверил, точно компилер тупит.
Пояснение — старшие три байта четырёхбайтной переменной должны быть обнулены перед копированием одного байта во младший байт четырехбайтной переменной.
НО Это у меня работает.
CODE |
asm
{
xor eax,eax;
mov al, 'н';
mov cur_char, al;
mov cur_ascii, eax;
mov cur_uns_ascii, eax;
};
|
Отредактировано Grigoriy — 07/02/2006, 19:01
|
|
Asher |
Отправлено: 08.02.2006, 10:11 |
|
Мастер участка
Группа: Модератор
Сообщений: 550
|
QUOTE | Да, я проверил, точно компилер тупит |
С чего это вдруг?
Все он правильно работает.Об
яснять надо компилятору лучше , что вы хотите, он не телепат.
P.S. а для начала сформулировать вопрос для себя, так чтобы понять.
|
|
Guest |
Отправлено: 08.02.2006, 11:26 |
|
Не зарегистрирован
|
QUOTE |
Да, я проверил, точно компилер тупит.
|
Ага, сейчас. Язык надо учить.
При расширении знаковой переменной знаковый разряд заполняет левые биты, а при беззнаковой переменной — нет. И за этим правильно следит компилятор.
PS. Asher прости, не сдержался. |
|