Форум — Ответы     (  К темам )
 ?  Андрей: Как получить код символьной переменной (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.