Форум — Ответы ( К темам )
? | Андрей: Как получить код символьной переменной (07-03-2003 11:20:26) |
Как в С++ получить код символьной переменной (код символа)? В Паскале этот метод называется Ord. | |
вася (07-03-2003 13:02:08) | |
в с они все в коде
| |
Георгий (07-03-2003 13:40:36) | |
в C++ тип данных — довольно условное понятие (в отличие от Pascal), которое используется компилятором для выбора "действий" по умолчанию и подстраховки программиста от явных ошибок. Компилятору можно сказать: "Поверьте мне — я знаю что я делаю" (с) (из сериала "Кувалда"), в тех случаях, когда его (компилятора) действия по умолчанию не устраивают пользователя (программиста): char*str="Поверьте мне — я знаю что я делаю"; int code; code=str[2];//char автоматически приводится к int, старшие байты = 0 в переменной code лежит число = коду символа 'в' code=*(int*)str;//а это явное указание 0-й байт переменной code == 'П' 1-й байт переменной code == 'о' 2-й байт переменной code == 'в' 3-й байт переменной code == 'е' ((code<<16)&0xFF000000)==str[2]; кстати таблицы преобразований базовых типов по умолчанию приведены в Help | |
Andrei (10-03-2003 16:56:05) | |
Ниже приведены коды клавиш, которыми можно пользоваться при обработке символов, строк, при проверке параметра Key в обработчиках событий OnKeyDown и OnKeyUp. Символы кириллицы соответствуют тем клавишам с латинскими символами, на которых они размещены. Клавиша Десятич- ное число Шестнад- цатерич- ное число Символическое имя Сравнение по символу F1 112 0x70 VK_F1 F2 113 0x71 VK_F2 F3 114 0x72 VK_F3 F4 115 0x73 VK_F4 F5 116 0x74 VK_F5 F6 117 0x75 VK_F6 F7 118 0x76 VK_F7 F8 119 0x77 VK_F8 F9 120 0x78 VK_F9 F10 121 0x79 VK_F10 пробел 32 0x20 VK_SPACE BackSpace 8 0x8 VK_BACK Tab 9 0x9 VK_TAB Enter 13 0x0D VK_RETURN Shift 16 0x10 VK_SHIFT Ctrl 17 0x11 VK_CONTROL Alt 18 0x12 VK_MENU CapsLock 20 0x14 VK_CAPITAL Esc 27 0x1B VK_ESCAPE Insert 45 0x2D VK_INSERT PageUp 33 0x21 VK_PRIOR PageDown 34 0x22 VK_NEXT End 35 0x23 VK_END Home 36 0x24 VK_HOME 37 0x25 VK_LEFT 38 0x26 VK_UP 39 0x27 VK_RIGHT 40 0x28 VK_DOWN Delete 46 0x2E VK_DELETE PrintScreen 44 0x2C VK_SNAPSHOT ScrollLock 145 0x91 VK_SCROLL Pause 19 0x13 VK_PAUSE NumLock 144 0x90 VK_NUMLOCK 0,) 48 0x30 '0' 1 ! 49 0x31 '1' 2 @ 50 0x32 '2' 3 # 51 0x33 '3' 4 $ 52 0x34 '4' 5 % 53 0x35 '5' 6 ^ 54 0x36 '6' 7 & 55 0x37 '7' 8 * 56 0x38 '8' 9 ( 57 0x39 '9' ` ~ 192 0xC0 - _ 189 0xBD = + 187 0xBB [ { 219 0xDB ] } 221 0xDD ; : 186 0xBA ' " 222 0xDE \ | 220 0xDC , < 188 0xBC . > 190 0xBE / ? 191 0xBF a,A 65 0x41 'A' b,B 66 0x42 'B' c,C 67 0x43 'C' d,D 68 0x44 'D' e,E 69 0x45 'E' f,F 70 0x46 'F' g,G 71 0x47 'G' h,H 72 0x48 'H' i,I 73 0x49 'I' j,J 74 0x4A 'J' k,K 75 0x4B 'K' l,L 76 0x4C 'L' m,M 77 0x4D 'M' n,N 78 0x4E 'N' o,O 79 0x4F 'O' p,P 80 0x50 'P' q,Q 81 0x51 'Q' r,R 82 0x52 'R' s,S 83 0x53 'S' t,T 84 0x54 'T' u,U 85 0x55 'U' v,V 86 0x56 'V' w,W 87 0x57 'W' x,X 88 0x58 'X' y,Y 89 0x59 'Y' z,Z 90 0x5A 'Z' На правой клавиатуре при выключенной клавише NumLock 0 96 0x60 VK_NUMPAD0 1 97 0x61 VK_NUMPAD1 2 98 0x62 VK_NUMPAD2 3 99 0x63 VK_NUMPAD3 4 100 0x64 VK_NUMPAD4 5 101 0x65 VK_NUMPAD5 6 102 0x66 VK_NUMPAD6 7 103 0x67 VK_NUMPAD7 8 104 0x68 VK_NUMPAD8 9 105 0x69 VK_NUMPAD9 * 106 0x6A VK_MULTIPLY + 107 0x6B VK_ADD - 109 0x6D VK_SUBTRACT . 110 0x6E VK_DECIMAL / 111 0x6F VK_DIVIDE С типами char и AnsiChar можно обращаться и как с целыми, и как с символами. Все зависит от контекста. Например, операторы char ch = 'Б'; Label1->Caption = ch; выведут в метку символ "Б". А при том же самом значении ch оператор Label1->Caption = (unsigned char)ch; выведет в метку "193" — число, соответствующее символу "Б". Оператор Label1->Caption = (char)(ch + 1); выведет в метку "В" — символ, следующий за "Б". Т.е. в данном контексте ch воспримется как целое число, к которому добавляется 1. А затем результат сложения явным образом приводится к символьному типу. Оператор for (int i = 1; i < 256; i++) RichEdit1->Lines->Add(IntToStr(i)+' '+(char)i); выведет в окно RichEdit1 строки вида "193 Б" для всех символов. Правда, видны будут только те символы, которые могут отображаться в окне RichEdit. |