ASCII 通常使用 8 位(1 字节)来存储每个字符。但是,第 8 位用作校验位,这意味着只有 7 位可用作存储每个字符。这使得 ASCII 能够存储总计
2^7 = 128 different values.
ASCII 值可以采用多种形式
- 数字
- 字母(大写和小写是分开的)
- 标点符号(?/|\£$ 等)
- 非打印命令(回车、转义、F1)
看看你的键盘,看看你总共有多少个不同的键。对于 Windows 键盘,数量应该是 104,或者对于传统键盘则是 101。考虑到 shift 功能值(a,A; b,B 等)以及一些键具有重复功能(两个 shift 键,数字键盘)。我们大致有 128 种键盘可以执行的功能。
二进制 |
十进制 |
十六进制 |
缩写 |
000 0000 |
0 |
00
|
NUL
|
000 0001 |
1 |
01
|
SOH
|
000 0010 |
2 |
02
|
STX
|
000 0011 |
3 |
03
|
ETX
|
000 0100 |
4 |
04
|
EOT
|
000 0101 |
5 |
05
|
ENQ
|
000 0110 |
6 |
06
|
ACK
|
000 0111 |
7 |
07
|
BEL
|
000 1000 |
8 |
08
|
BS
|
000 1001 |
9 |
09
|
HT
|
000 1010 |
10 |
0A |
LF
|
000 1011 |
11 |
0B |
VT
|
000 1100 |
12 |
0C |
FF
|
000 1101 |
13 |
0D |
CR
|
000 1110 |
14 |
0E |
SO
|
000 1111 |
15 |
0F |
SI
|
001 0000 |
16 |
10
|
DLE
|
001 0001 |
17 |
11
|
DC1
|
001 0010 |
18 |
12
|
DC2
|
001 0011 |
19 |
13
|
DC3
|
001 0100 |
20 |
14
|
DC4
|
001 0101 |
21 |
15
|
NAK
|
001 0110 |
22 |
16
|
SYN
|
001 0111 |
23 |
17
|
ETB
|
001 1000 |
24 |
18
|
CAN
|
001 1001 |
25 |
19
|
EM
|
001 1010 |
26 |
1A |
SUB
|
001 1011 |
27 |
1B |
ESC
|
001 1100 |
28 |
1C |
FS
|
001 1101 |
29 |
1D |
GS
|
001 1110 |
30 |
1E |
RS
|
001 1111 |
31 |
1F |
US
|
|
111 1111 |
127 |
7F |
DEL
|
|
二进制 |
十进制 |
十六进制 |
字形 |
010 0000 |
32 |
20 |
?
|
010 0001 |
33 |
21 |
!
|
010 0010 |
34 |
22 |
"
|
010 0011 |
35 |
23 |
#
|
010 0100 |
36 |
24 |
$
|
010 0101 |
37 |
25 |
%
|
010 0110 |
38 |
26 |
&
|
010 0111 |
39 |
27 |
'
|
010 1000 |
40 |
28 |
(
|
010 1001 |
41 |
29 |
)
|
010 1010 |
42 |
2A |
*
|
010 1011 |
43 |
2B |
+
|
010 1100 |
44 |
2C |
,
|
010 1101 |
45 |
2D |
-
|
010 1110 |
46 |
2E |
.
|
010 1111 |
47 |
2F |
/
|
011 0000 |
48 |
30 |
0
|
011 0001 |
49 |
31 |
1
|
011 0010 |
50 |
32 |
2
|
011 0011 |
51 |
33 |
3
|
011 0100 |
52 |
34 |
4
|
011 0101 |
53 |
35 |
5
|
011 0110 |
54 |
36 |
6
|
011 0111 |
55 |
37 |
7
|
011 1000 |
56 |
38 |
8
|
011 1001 |
57 |
39 |
9
|
011 1010 |
58 |
3A |
:
|
011 1011 |
59 |
3B |
;
|
011 1100 |
60 |
3C |
<
|
011 1101 |
61 |
3D |
=
|
011 1110 |
62 |
3E |
>
|
011 1111 |
63 |
3F |
?
|
|
二进制 |
十进制 |
十六进制 |
字形 |
100 0000 |
64 |
40 |
@
|
100 0001 |
65 |
41 |
A
|
100 0010 |
66 |
42 |
B
|
100 0011 |
67 |
43 |
C
|
100 0100 |
68 |
44 |
D
|
100 0101 |
69 |
45 |
E
|
100 0110 |
70 |
46 |
F
|
100 0111 |
71 |
47 |
G
|
100 1000 |
72 |
48 |
H
|
100 1001 |
73 |
49 |
I
|
100 1010 |
74 |
4A |
J
|
100 1011 |
75 |
4B |
K
|
100 1100 |
76 |
4C |
L
|
100 1101 |
77 |
4D |
M
|
100 1110 |
78 |
4E |
N
|
100 1111 |
79 |
4F |
O
|
101 0000 |
80 |
50 |
P
|
101 0001 |
81 |
51 |
Q
|
101 0010 |
82 |
52 |
R
|
101 0011 |
83 |
53 |
S
|
101 0100 |
84 |
54 |
T
|
101 0101 |
85 |
55 |
U
|
101 0110 |
86 |
56 |
V
|
101 0111 |
87 |
57 |
W
|
101 1000 |
88 |
58 |
X
|
101 1001 |
89 |
59 |
Y
|
101 1010 |
90 |
5A |
Z
|
101 1011 |
91 |
5B |
[
|
101 1100 |
92 |
5C |
\
|
101 1101 |
93 |
5D |
]
|
101 1110 |
94 |
5E |
^
|
101 1111 |
95 |
5F |
_
|
|
二进制 |
十进制 |
十六进制 |
字形 |
110 0000 |
96 |
60 |
`
|
110 0001 |
97 |
61 |
a
|
110 0010 |
98 |
62 |
b
|
110 0011 |
99 |
63 |
c
|
110 0100 |
100 |
64 |
d
|
110 0101 |
101 |
65 |
e
|
110 0110 |
102 |
66 |
f
|
110 0111 |
103 |
67 |
g
|
110 1000 |
104 |
68 |
h
|
110 1001 |
105 |
69 |
i
|
110 1010 |
106 |
6A |
j
|
110 1011 |
107 |
6B |
k
|
110 1100 |
108 |
6C |
l
|
110 1101 |
109 |
6D |
m
|
110 1110 |
110 |
6E |
n
|
110 1111 |
111 |
6F |
o
|
111 0000 |
112 |
70 |
p
|
111 0001 |
113 |
71 |
q
|
111 0010 |
114 |
72 |
r
|
111 0011 |
115 |
73 |
s
|
111 0100 |
116 |
74 |
t
|
111 0101 |
117 |
75 |
u
|
111 0110 |
118 |
76 |
v
|
111 0111 |
119 |
77 |
w
|
111 1000 |
120 |
78 |
x
|
111 1001 |
121 |
79 |
y
|
111 1010 |
122 |
7A |
z
|
111 1011 |
123 |
7B |
{
|
111 1100 |
124 |
7C |
|
|
111 1101 |
125 |
7D |
}
|
111 1110 |
126 |
7E |
~
|
|
如果你仔细观察每个字符的 ASCII 表示,你可能会发现一些模式。例如
二进制 |
十进制 |
十六进制 |
字形 |
110 0001 |
97 |
61 |
a
|
110 0010 |
98 |
62 |
b
|
110 0011 |
99 |
63 |
c
|
如你所见,a = 97,b = 98,c = 99。这意味着如果我们知道字符的值,我们就可以很容易地计算出后续或先前字符的值。
示例:ASCII 字符
不要看上面的 ASCII 表!如果我们知道字符 '5' 的 ASCII 值为 011 0101,那么字符 '8' 的 ASCII 值是什么? 我们知道 '8' 是 '5' 后面的三个字符,因为 5,6,7,8。这意味着 '8' 的 ASCII 值将比 '5' 的 ASCII 值大三。
011 0101 ASCII '5'
+ 011
--------
011 1000 ASCII '8'
检查上面,这是正确的值。 如果你担心在二进制加法中出错,你可以使用十进制数字来处理。例如,给你 'g' 的 ASCII 值,110 0111,'e' 的值是多少? 我们知道 'e' 是 'g' 之前的两个字符,因为 e, f, g。这意味着 'e' 的 ASCII 值将比 'g' 的 ASCII 值小二。
64 32 16 8 4 2 1
1 1 0 0 1 1 1 = 10310 = ASCII value of 'g'
103 - 2 = 10110
64 32 16 8 4 2 1
1 1 0 0 1 0 1 = 10110 = ASCII value of 'e'
|
练习:ASCII
不使用备忘表(你在考试中不会得到它!)回答以下问题 字母 'Z' 的 ASCII 码为 90(十进制),字母 'X' 是如何存储的
答案
88 - 因为它在字母表中向下移动了 2 个字符
以下文本使用了多少个 ASCII '字符'?
Hello Pete,
ASCII rocks!
答案
27 或 26。如果你说 23,你就错了,因为你必须包括每行末尾的非打印字符。每行末尾都需要一个 EOL 命令,新行需要一个回车 (CR),使文本如下
Hello Pete,[EOL][CR]
ASCII rocks![EOL]
|
对于拉丁字母,ASCII 通常可以正常工作,但如果你想用普通话或印地语写点东西呢?我们需要另一种编码方案!
扩展:编码 ASCII
你可能需要在从文本文件读取时使用 ASCII 码。要查看每个 ASCII 码的含义,我们可以使用以下函数 ChrW(x) ,它返回十进制值为 x 的 ASCII 码。尝试以下代码以查看前 128 个字符。字符 10 有什么特别之处?
For x = 0 To 127
Console.WriteLine("ASCII for " & x & " = " & ChrW(x))
Next
Console.ReadLine()
|