C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Как узнaть код ASCII?, Нужна функция
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 — и проблема со знаком пропадёт. но появятся другие smile.gif
Grigoriy
Отправлено: 07.02.2006, 18:59


Мастер участка

Группа: Участник
Сообщений: 381



Да, я проверил, точно компилер тупит. ohmy.gif
Пояснение — старшие три байта четырёхбайтной переменной должны быть обнулены перед копированием одного байта во младший байт четырехбайтной переменной.

НО Это у меня работает.
cool.gif cool.gif
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

Да, я проверил, точно компилер тупит.

Ага, сейчас. biggrin.gif Язык надо учить.
При расширении знаковой переменной знаковый разряд заполняет левые биты, а при беззнаковой переменной — нет. И за этим правильно следит компилятор.

PS. Asher прости, не сдержался.

Вернуться в Вопросы программирования в C++Builder