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 прости, не сдержался. |
 |