ASCII碼專題

来源:https://www.cnblogs.com/lzp123456-/archive/2018/08/29/9557385.html
-Advertisement-
Play Games

ASCII(American Standard Code for Information Interchange,美國信息互換標準代碼)是一套基於拉丁字母的字元編碼,共收錄了 128 個字元,用一個位元組就可以存儲,它等同於國際標準 ISO/IEC 646。ASCII 規範於 1967 年第一次發佈, ...


ASCII(American Standard Code for Information Interchange,美國信息互換標準代碼)是一套基於拉丁字母的字元編碼,共收錄了 128 個字元,用一個位元組就可以存儲,它等同於國際標準 ISO/IEC 646。ASCII 規範於 1967 年第一次發佈,最後一次更新是在 1986 年,它包含了 33 個控制字元(具有某些特殊功能但是無法顯示的字元)和 95 個可顯示字元。

ASCII碼表

二進位十進位十六進位縮寫/字元解釋
00000000 0 00 NUL (NULL) 空字元
00000001 1 01 SOH (Start Of Headling) 標題開始
00000010 2 02 STX (Start Of Text) 正文開始
00000011 3 03 ETX (End Of Text) 正文結束
00000100 4 04 EOT (End Of Transmission) 傳輸結束
00000101 5 05 ENQ (Enquiry) 請求
00000110 6 06 ACK (Acknowledge) 回應/響應/收到通知
00000111 7 07 BEL (Bell) 響鈴
00001000 8 08 BS (Backspace) 退格
00001001 9 09 HT (Horizontal Tab) 水平製表符
00001010 10 0A LF/NL(Line Feed/New Line) 換行鍵
00001011 11 0B VT (Vertical Tab) 垂直製表符
00001100 12 0C FF/NP (Form Feed/New Page) 換頁鍵
00001101 13 0D CR (Carriage Return) 回車鍵
00001110 14 0E SO (Shift Out) 不用切換
00001111 15 0F SI (Shift In) 啟用切換
00010000 16 10 DLE (Data Link Escape) 數據鏈路轉義
00010001 17 11 DC1/XON (Device Control 1/Transmission On) 設備控制1/傳輸開始
00010010 18 12 DC2 (Device Control 2) 設備控制2
00010011 19 13 DC3/XOFF (Device Control 3/Transmission Off) 設備控制3/傳輸中斷
00010100 20 14 DC4 (Device Control 4) 設備控制4
00010101 21 15 NAK (Negative Acknowledge) 無響應/非正常響應/拒絕接收
00010110 22 16 SYN (Synchronous Idle) 同步空閑
00010111 23 17 ETB (End of Transmission Block) 傳輸塊結束/塊傳輸終止
00011000 24 18 CAN (Cancel) 取消
00011001 25 19 EM (End of Medium) 已到介質末端/介質存儲已滿/介質中斷
00011010 26 1A SUB (Substitute) 替補/替換
00011011 27 1B ESC (Escape) 逃離/取消
00011100 28 1C FS (File Separator) 文件分割符
00011101 29 1D GS (Group Separator) 組分隔符/分組符
00011110 30 1E RS (Record Separator) 記錄分離符
00011111 31 1F US (Unit Separator) 單元分隔符
00100000 32 20 (Space) 空格
00100001 33 21 !  
00100010 34 22 "  
00100011 35 23 #  
00100100 36 24 $  
00100101 37 25 %  
00100110 38 26 &  
00100111 39 27 '  
00101000 40 28 (  
00101001 41 29 )  
00101010 42 2A *  
00101011 43 2B +  
00101100 44 2C ,  
00101101 45 2D -  
00101110 46 2E .  
00101111 47 2F /  
00110000 48 30 0  
00110001 49 31 1  
00110010 50 32 2  
00110011 51 33 3  
00110100 52 34 4  
00110101 53 35 5  
00110110 54 36 6  
00110111 55 37 7  
00111000 56 38 8  
00111001 57 39 9  
00111010 58 3A :  
00111011 59 3B ;  
00111100 60 3C <  
00111101 61 3D =  
00111110 62 3E >  
00111111 63 3F ?  
01000000 64 40 @  
01000001 65 41 A  
01000010 66 42 B  
01000011 67 43 C  
01000100 68 44 D  
01000101 69 45 E  
01000110 70 46 F  
01000111 71 47 G  
01001000 72 48 H  
01001001 73 49 I  
01001010 74 4A J  
01001011 75 4B K  
01001100 76 4C L  
01001101 77 4D M  
01001110 78 4E N  
01001111 79 4F O  
01010000 80 50 P  
01010001 81 51 Q  
01010010 82 52 R  
01010011 83 53 S  
01010100 84 54 T  
01010101 85 55 U  
01010110 86 56 V  
01010111 87 57 W  
01011000 88 58 X  
01011001 89 59 Y  
01011010 90 5A Z  
01011011 91 5B [  
01011100 92 5C \  
01011101 93 5D ]  
01011110 94 5E ^  
01011111 95 5F _  
01100000 96 60 `  
01100001 97 61 a  
01100010 98 62 b  
01100011 99 63 c  
01100100 100 64 d  
01100101 101 65 e  
01100110 102 66 f  
01100111 103 67 g  
01101000 104 68 h  
01101001 105 69 i  
01101010 106 6A j  
01101011 107 6B k  
01101100 108 6C l  
01101101 109 6D m  
01101110 110 6E n  
01101111 111 6F o  
01110000 112 70 p  
01110001 113 71 q  
01110010 114 72 r  
01110011 115 73 s  
01110100 116 74 t  
01110101 117 75 u  
01110110 118 76 v  
01110111 119 77 w  
01111000 120 78 x  
01111001 121 79 y  
01111010 122 7A z  
01111011 123 7B {  
01111100 124 7C |  
01111101 125 7D }  
01111110 126 7E ~  
01111111 127 7F DEL (Delete) 刪除

對控制字元的解釋

ASCII 編碼中第 0~31 個字元(開頭的 32 個字元)以及第 127 個字元(最後一個字元)都是不可見的(無法顯示),但是它們都具有一些特殊功能,所以稱為控制字元( Control Character)或者功能碼(Function Code)。

這 33 個控制字元大都與通信、數據存儲以及老式設備有關,有些在現代電腦中的含義已經改變了。

有些控制符需要一定的電腦功底才能理解,初學者可以跳過,選擇容易的理解即可。

 

下麵列出了部分控制字元的具體功能:

    • NUL (0)

      NULL,空字元。空字元起初本意可以看作為 NOP(中文意為空操作,就是啥都不做的意思),此位置可以忽略一個字元。

      之所以有這個空字元,主要是用於電腦早期的記錄信息的紙帶,此處留個 NUL 字元,意思是先占這個位置,以待後用,比如你哪天想起來了,在這個位置在放一個別的啥字元之類的。

      後來呢,NUL 被用於C語言中,表示字元串的結束,當一個字元串中間出現 NUL 時,就意味著這個是一個字元串的結尾了。這樣就方便按照自己需求去定義字元串,多長都行,當然只要你記憶體放得下,然後最後加一個\0,即空字元,意思是當前字元串到此結束。
    • SOH (1)

      Start Of Heading,標題開始。如果信息溝通交流主要以命令和消息的形式的話,SOH 就可以用於標記每個消息的開始。

      1963年,最開始 ASCII 標準中,把此字元定義為 Start of Message,後來又改為現在的 Start Of Heading。

      現在,這個 SOH 常見於主從(master-slave)模式的 RS232 的通信中,一個主設備,以 SOH 開頭,和從設備進行通信。這樣方便從設備在數據傳輸出現錯誤的時候,在下一次通信之前,去實現重新同步(resynchronize)。如果沒有一個清晰的類似於 SOH 這樣的標記,去標記每個命令的起始或開頭的話,那麼重新同步,就很難實現了。
    • STX (2) 和 ETX (3)

      STX 表示 Start Of Text,意思是“文本開始”;ETX 表示 End Of Text,意思是“文本結束”。

      通過某種通訊協議去傳輸的一個數據(包),稱為一幀的話,常會包含一個幀頭,包含了定址信息,即你是要發給誰,要發送到目的地是哪裡,其後跟著真正要發送的數據內容。

      而 STX,就用於標記這個數據內容的開始。接下來是要傳輸的數據,最後是 ETX,表明數據的結束。

      而中間具體傳輸的數據內容,ASCII 並沒有去定義,它和你所用的傳輸協議有關。
      幀頭數據或文本內容
      SOH(表明幀頭開始) ......(幀頭信息,比如包含了目的地址,表明你發送給誰等等) STX(表明數據開始) ......(真正要傳輸的數據) ETX(表明數據結束
    • BEL (7)

      BELl,響鈴。在 ASCII 編碼中,BEL 是個比較有意思的東西。BEL 用一個可以聽得見的聲音來吸引人們的註意,既可以用於電腦,也可以用於周邊設備(比如印表機)。

      註意,BEL 不是音效卡或者喇叭發出的聲音,而是蜂鳴器發出的聲音,主要用於報警,比如硬體出現故障時就會聽到這個聲音,有的電腦操作系統正常啟動也會聽到這個聲音。蜂鳴器沒有直接安裝到主板上,而是需要連接到主板上的一種外設,現代很多電腦都不安裝蜂鳴器了,即使輸出 BEL 也聽不到聲音,這個時候 BEL 就沒有任何作用了。
    • BS (8)

      BackSpace,退格鍵。退格鍵的功能,隨著時間變化,意義也變得不同了。

      退格鍵起初的意思是,在印表機和電傳打字機上,往回移動一格游標,以起到強調該字元的作用。比如你想要列印一個 a,然後加上退格鍵後,就成了 aBS^。在機械類打字機上,此方法能夠起到實際的強調字元的作用,但是對於後來的 CTR 下時期來說,就無法起到對應效果了。

      而現代所用的退格鍵,不僅僅表示游標往回移動了一格,同時也刪除了移動後該位置的字元。
    • HT (9)

      Horizontal Tab,水平製表符,相當於 Table/Tab 鍵。

      水平製表符的作用是用於佈局,它控制輸出設備前進到下一個表格去處理。而製表符 Table/Tab 的寬度也是靈活不固定的,只不過在多數設備上製表符 Tab 都預定義為 4 個空格的寬度。

      水平製表符 HT 不僅能減少數據輸入者的工作量,對於格式化好的文字來說,還能夠減少存儲空間,因為一個Tab鍵,就代替了 4 個空格。
    • LF (10)

      Line Feed,直譯為“給印表機等喂一行”,也就是“換行”的意思。LF 是 ASCII 編碼中常被誤用的字元之一。

      LF 的最原始的含義是,移動印表機的頭到下一行。而另外一個 ASCII 字元,CR(Carriage Return)才是將印表機的頭移到最左邊,即一行的開始(行首)。很多串口協議和 MS-DOS 及 Windows 操作系統,也都是這麼實現的。

      而C語言和 Unix 操作系統將 LF 的含義重新定義為“新行”,即 LF 和 CR 的組合效果,也就是回車且換行的意思。

      從程式的角度出發,C語言和 Unix 對 LF 的定義顯得更加自然,而 MS-DOS 的實現更接近於 LF 的本意。

      現在人們常將 LF 用做“新行(newline)”的功能,大多數文本編輯軟體也都可以處理單個 LF 或者 CR/LF 的組合了。
    • VT (11)

      Vertical Tab,垂直製表符。它類似於水平製表符 Tab,目的是為了減少佈局中的工作,同時也減少了格式化字元時所需要存儲字元的空間。VT 控制符用於跳到下一個標記行。

      說實話,還真沒看到有些地方需要用 VT,因為一般在換行的時候都是用 LF 代替 VT 了。
    • FF (12)

      Form Feed,換頁。設計換頁鍵,是用來控制印表機行為的。當印表機收到此鍵碼的時候,印表機移動到下一頁。

      不同的設備的終端對此控制符所表現的行為各不同,有些會清除屏幕,有些只是顯示^L字元,有些只是新換一行而已。例如,Unix/Linux 下的 Bash Shell 和 Tcsh 就把 FF 看做是一個清空屏幕的命令。
    • CR (13)

      Carriage return,回車,表示機器的滑動部分(或者底座)返回。

      CR 回車的原意是讓列印頭回到左邊界,並沒有移動到下一行的意思。隨著時間的流逝,後來人們把 CR 的意思弄成了 Enter 鍵,用於示意輸入完畢。

      在數據以屏幕顯示的情況下,人們按下 Enter 的同時,也希望把游標移動到下一行,因此C語言和 Unix 重新定義了 CR 的含義,將其表示為移動到下一行。當輸入 CR 時,系統也常常隱式地將其轉換為LF。
    • SO (14) 和 SI (15)

      SO,Shift Out,不用切換;SI,Shift In,啟用切換。

      早在 1960s 年代,設計 ASCII 編碼的美國人就已經想到了,ASCII 編碼不僅僅能用於英文,也要能用於外文字元集,這很重要,定義 Shift In 和 Shift Out 正是考慮到了這點。

      最開始,其意為在西里爾語和拉丁語之間切換。西里爾語 ASCII(也即 KOI-7 編碼)將 Shift 作為一個普通字元,而拉丁語 ASCII(也就是我們通常所說的 ASCII)用 Shift 去改變印表機的字體,它們完全是兩種含義。

      在拉丁語 ASCII 中,SO 用於產生雙倍寬度的字元(類似於全形),而用 SI 列印壓縮的字體(類似於半形)。
    • DLE (16)

      Data Link Escape,數據鏈路轉義。

      有時候我們需要在通信過程中發送一些控制字元,但是總有一些情況下,這些控制字元被看成了普通的數據流,而沒有起到對應的控制效果,ASCII 編碼引入 DLE 來解決這類問題。

      如果數據流中檢測到了 DLE,數據接收端會對數據流中接下來的字元另作處理。但是具體如何處理,ASCII 規範中並沒有定義,只是弄了個 DLE 去打斷正常的數據流,告訴接下來的數據要特殊對待。
    • DC1 (17)

      Device Control 1,或者 XON – Transmission on。

      這個 ASCII 控制符儘管原先定義為 DC1, 但是現在常表示為 XON,用於串列通信中的軟體流控制。其主要作用為,在通信被控制符 XOFF 中斷之後,重新開始信息傳輸。

      用過串列終端的人應該還記得,當有時候數據出錯了,按 Ctrl+Q(等價於XON)有時候可以起到重新傳輸的效果。這是因為,此 Ctrl+Q 鍵盤序列實際上就是產生 XON 控制符,它可以將那些由於終端或者主機方面,由於偶爾出現的錯誤的 XOFF 控制符而中斷的通信解鎖,使其正常通信。
    • DC3 (19)

      Device Control 3,或者 XOFF(Transmission off,傳輸中斷)。

      EM (25)

      End of Medium,已到介質末端,介質存儲已滿。

      EM 用於,當數據存儲到達串列存儲介質末尾的時候,就像磁帶或磁頭滾動到介質末尾一樣。其用於表述數據的邏輯終點,即不必非要是物理上的達到數據載體的末尾。
    • FS(28)

      File Separator,文件分隔符。FS 是個很有意思的控制字元,它可以讓我們看到 1960s 年代的電腦是如何組織的。

      我們現在習慣於隨機訪問一些存儲介質,比如 RAM、磁碟等,但是在設計 ASCII 編碼的那個年代,大部分數據還是順序的、串列的,而不是隨機訪問的。此處所說的串列,不僅僅指的是串列通信,還指的是順序存儲介質,比如穿孔卡片、紙帶、磁帶等。

      在串列通信的時代,設計這麼一個用於表示文件分隔的控制字元,用於分割兩個單獨的文件,是一件很明智的事情。
    • GS(29)

      Group Separator,分組符。

      ASCII 定義控制字元的原因之一就是考慮到了數據存儲。

      大部分情況下,資料庫的建立都和表有關,表包含了多條記錄。同一個表中的所有記錄屬於同一類型,不同的表中的記錄屬於不同的類型。

      而分組符 GS 就是用來分隔串列數據存儲系統中的不同的組。值得註意的是,當時還沒有使用 Excel 表格,ASCII 時代的人把它叫做組。
    • RS(30)

      Record Separator,記錄分隔符,用於分隔一個組或表中的多條記錄。
    • US(31)

      Unit Separator,單元分隔符。

      在 ASCII 定義中,資料庫中所存儲的最小的數據項叫做單元(Unit)。而現在我們稱其欄位(Field)。單元分隔符 US 用於分割串列數據存儲環境下的不同單元。

      現在的資料庫實現都要求大部分類型都擁有固定的長度,儘管有時候可能用不到,但是對於每一個欄位,卻都要分配足夠大的空間,用於存放最大可能的數據。

      這種做法的弊端就是占用了大量的存儲空間,而 US 控制符允許欄位具有可變的長度。在 1960s 年代,數據存儲空間很有限,用 US 將不同單元分隔開,能節省很多空間。
    • DEL (127)

      Delete,刪除。

      有人也許會問,為何 ASCII 編碼中其它控制字元的值都很小(即 0~31),而 DEL 的值卻很大呢(為 127)?

      這是由於這個特殊的字元是為紙帶而定義的。在那個年代,絕大多數的紙帶都是用7個孔洞去編碼數據的。而 127 這個值所對應的二進位值為111 1111(所有 7 個比特位都是1),將 DEL 用在現存的紙帶上時,所有的洞就都被穿孔了,就把已經存在的數據都擦除掉了,就起到了刪除的作用。

判斷題:

C語言使用的就是 ASCII 編碼,字元在存儲時會轉換成對應的 ASCII 碼值,在讀取時也是根據 ASCII 碼找到對應的字元。(X)

答:C語言有時候使用 ASCII 編碼,有時候卻不是,而是使用後面兩節中即將講到的 GBK 編碼和 Unicode 字元集。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Java當中的異常 瞭解 當中的異常,那麼什麼是異常呢?異常又有什麼分類呢?異常中的特殊結構: 結構的使用方法。 異常是一種對象,是靠虛擬機產生的,異常中斷了正常指令流(程式靠著一個又一個指令)的事件,異常是運行時出現的。在 中編譯上出現的錯誤為所謂的語法上等的錯誤,而異常是編譯通過的,但在運行時產 ...
  • Spring提供了一個AOP框架,讓我把切麵插入到方法執行的周圍。 1、概念 定義通用功能,通過申明定義這些功能要以何種方式在何處應用,而不需要修改受影響的類。這些通用功能可以模塊化為特殊的類,即切麵。 連接點:連接點是一個應用執行過程中能夠插入一個切麵的點(Spring只支持方法級別的連接點) 切 ...
  • 假設Andy和Doris想在晚餐時選擇一家餐廳,並且他們都有一個表示最喜愛餐廳的列表,每個餐廳的名字用字元串表示。 你需要幫助他們用最少的索引和找出他們共同喜愛的餐廳。 如果答案不止一個,則輸出所有答案並且不考慮順序。 你可以假設總是存在一個答案。 示例 1: 輸入: ["Shogun", "Tap ...
  • 需求:實體是blog 和author 關係是一對一,查詢 blog 以及 blog 的作者信息 嵌套查詢 xml select from blog where bid = {id, jdbcType=INTEGER} ...
  • 引言 還記得大三時上培訓班的是時候,當時的培訓老師說自己是本地講解spring最好的講師,但是後來等我實習了看了《Spring 3.x 企業應用開發實戰》以及後續版本《精通Spring+4.x++企業應用開發實戰》才發現,這位培訓老師就是基本按照《Spring 3.x 企業應用開發實戰》給我們講sp ...
  • #以下是我自己在聯繫列表中所編寫的語句:names=["zangsan",'lisi','wangermazi','Xiaoliuzi','dabiaoge','牛erbiaodi']# 0 1 2 3 4 5 print(names[2])#簡單取值#取lisi和wangermaziprint(n ...
  • 11種狀態解析 LISTEN 等待從任何遠端TCP 和埠的連接請求。 SYN_SENT 發送完一個連接請求後等待一個匹配的連接請求。 SYN_RECEIVED 發送連接請求並且接收到匹配的連接請求以後等待連接請求確認。 ESTABLISHED 表示一個打開的連接,接收到的數據可以被投遞給用戶。連接 ...
  • 剛剛開始學習c++。之前c的內容掌握的也不多,基本只是一本概論課的程度,以前使用c的struct寫過的鏈表、用python寫過簡單的數據結構,就試著把兩者用c++寫出來,也是對c++的class,以及繼承中的public/protected/private的性質進行初步瞭解。第一次寫頭文件.h和源文 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...