【什么是Function
Code功能碼或Function Character功能字符】
ASCII字符集,大家都知道吧,最基本的包含了128個字符。其中前32個,0-31,即0x00-0x1F,都是不可見字符。這些字符,就叫做控制字符。
這些字符沒法打印出來,但是每個字符,都對應(yīng)著一個特殊的控制功能的字符,簡稱功能字符或功能碼Function Code。
簡言之:ASCII中前32個字符,統(tǒng)稱為Function Code功能字符。
此外,由于ASCII中的127對應(yīng)的是Delete,也是不可見的,所以,此處根據(jù)筆者的理解,也可以歸為Function Code。
此類字符,對應(yīng)不同的“功能”,起到一定的“控制作用”,所以,稱為控制字符。
關(guān)于每個控制字符的控制功能縮寫,參見下表:
表格1ASCII中的控制字符
十
進制
十六
進制
控制
字符
轉(zhuǎn)義
字符*
說明
Ctrl +
下列字母*
0
00
NUL
/0
Null character(空字符)
@ (Shift + 2)
1
01
SOH
Start of Header(標(biāo)題開始)
A
2
02
STX
Start of Text(正文開始)
B
3
03
ETX
End of Text(正文結(jié)束)
C
4
04
EOT
End of Transmission(傳輸結(jié)束)
D
5
05
ENQ
Enquiry(請求)
E
6
06
ACK
Acknowledgment(收到通知/響應(yīng))
F
7
07
BEL
/a
Bell(響鈴)
G
8
08
BS
/b
Backspace(退格)
H
9
09
HT
/t
Horizontal Tab(水平制表符)
I
10
0A
LF
/n
Line feed(換行鍵)
J
11
0B
VT
/v
Vertical Tab(垂直制表符)
K
12
0C
FF
/f
Form feed(換頁鍵)
L
13
0D
CR
/r
Carriage return(回車鍵)
M
14
0E
SO
Shift Out(不用切換)
N
15
0F
SI
Shift In(啟用切換)
O
16
10
DLE
Data Link Escape(數(shù)據(jù)鏈路轉(zhuǎn)義)
P
17
11
DC1
Device Control 1(設(shè)備控制1) /XON(Transmit On)
Q
18
12
DC2
Device Control 2(設(shè)備控制2)
R
19
13
DC3
Device Control 3(設(shè)備控制3) /XOFF(Transmit Off)
S
20
14
DC4
Device Control 4(設(shè)備控制4)
T
21
15
NAK
Negative Acknowledgement(拒絕接收/無響應(yīng))
U
22
16
SYN
Synchronous Idle(同步空閑)
V
23
17
ETB
End of Trans the Block(傳輸塊結(jié)束)
W
24
18
CAN
Cancel(取消)
X
25
19
EM
End of Medium(已到介質(zhì)末端/介質(zhì)存儲已滿)
Y
26
1A
SUB
Substitute(替補/替換)
Z
27
1B
ESC
/e
Escape(溢出/逃離/取消)
[
28
1C
FS
File Separator(文件分割符)
/
29
1D
GS
Group Separator(分組符)
]
30
1E
RS
Record Separator(記錄分隔符)
^ (Shit + 6)
31
1F
US
Unit Separator(單元分隔符)
_ (Shift + -)
32
20
SP
White space
[Space] *
127
7F
DEL
Delete(刪除)
[Delete] *
注(*):
1.轉(zhuǎn)義字符:即在C語言中或其他地方如何表示。
2.用鍵盤輸入控制字符:其中,32是空格鍵,127是Delete鍵,都不需要加Ctrl鍵,即可直接輸入。
3.可以通過“Ctrl+對應(yīng)按鍵”實現(xiàn)上述控制字符的輸入,你可能遇到的一些,比如:用Ctrl+V輸入SYNC,Ctrl+M輸入Enter(當(dāng)然也可以直接用Enter鍵,但是在Windows下面,其可能會發(fā)送兩個字符:CR和LF),Ctrl+Q輸入XON,Ctrl+S輸入XOFF等等。
其具體每個控制字符的含義,詳解介紹如下:
【ASCII中的Function/Control Code功能字符的詳細(xì)含義】
0 – NUL –NULl字符/空字符
ASCII字符集中的空字符,NULL,起初本意可以看作為NOP(中文意為空操作,就是啥都不做的意思),此位置可以忽略一個字符。
之所以有這個空字符,主要是用于計算機早期的記錄信息的紙帶,此處留個NUL字符,意思是先占這個位置,以待后用,比如你哪天想起來了,在這個位置在放一個別的啥字符之類的。
后來呢,NUL字符被用于C語言中,字符串的終結(jié)符,當(dāng)一個字符串中間出現(xiàn)NUL / NULL,代碼里面表現(xiàn)為/0,的時候,就意味著這個是一個字符串的結(jié)尾了。這樣就方便按照自己需求去定義字符串,多長都行,當(dāng)然只要你內(nèi)存放得下,然后最后加一個/0,即空字符,意思是當(dāng)前字符串到此結(jié)束。
1 – SOH –StartOfHeading標(biāo)題開始
如果信息溝通交流主要以命令和消息的形式的話,SOH就可以用于標(biāo)記每個消息的開始。
1963年,最開始ASCII標(biāo)準(zhǔn)中,把此字符定義為Start of Message,后來又改為現(xiàn)在的Start Of Heading。
現(xiàn)在,這個SOH常見于主從(master-slave)模式的RS232的通信中,一個主設(shè)備,以SOH開頭,和從設(shè)備進行通信。這樣方便從設(shè)備在數(shù)據(jù)傳輸出現(xiàn)錯誤的時候,在下一次通信之前,去實現(xiàn)重新同步(resynchronize)。如果沒有一個清晰的類似于SOH這樣的標(biāo)記,去標(biāo)記每個命令的起始或開頭的話,那么重新同步,就很難實現(xiàn)了。
2 – STX –StartOfText文本開始
3 – ETX –End OfText文本結(jié)束
通過某種通訊協(xié)議去傳輸?shù)囊粋€數(shù)據(jù)(包),稱為一幀的話,常會包含一個幀頭,包含了尋址信息,即你是要發(fā)給誰,要發(fā)送到目的地是哪里,其后跟著真正要發(fā)送的數(shù)據(jù)內(nèi)容。
而STX,就用于標(biāo)記這個數(shù)據(jù)內(nèi)容的開始。接下來是要傳輸?shù)臄?shù)據(jù),最后是ETX,表明數(shù)據(jù)的結(jié)束。
其中,中間具體傳輸?shù)臄?shù)據(jù)內(nèi)容,ASCII規(guī)范并沒有去定義,其和你所用的傳輸協(xié)議,具體自己要傳什么數(shù)據(jù)有關(guān)。
幀頭
數(shù)據(jù)或文本內(nèi)容
SOH(表明幀頭開始)
。。。。(幀頭信息,比如包含了目的地址,表明你發(fā)送給誰等等)
STX(表明數(shù)據(jù)開始)
。。。(真正要傳輸?shù)臄?shù)據(jù))
ETX(表明數(shù)據(jù)結(jié)束)