在美式鍵盤上,每個可列印字元在 ASCII 表中都有介於 32 到 126 之間的一個固定整數,再加上 33 個控制字元,完整標準涵蓋了十進位 0 到 127。將 ASCII 轉換為整數,意思就是將文字中的每個字元替換成它所對應的十進位數字——例如,字母 "A" 變成整數 65,數字 "0" 變成 48,而一個空白字元變成 32。這個對應關係由 IETF RFC 20 所定義,並且符合 Unicode C0 Controls and Basic Latin 對照表,因此只要是遵循該標準的現代系統,這些整數都能通用。要注意的是,「ASCII」有其嚴格定義:任何超出字碼點 127 的內容,包括帶有腔調的字母、表情符號以及許多標點符號,都沒有對應的 ASCII 整數,必須交由其他編碼方式處理,例如 UTF-8。因此,當有人搜尋將 ASCII 轉換為整數的方法時,他們通常需要的是一個能接收純英文文字、回傳一份乾淨的十進位數字清單,並且對落在 7 位元範圍之外的字元拒絕自行編造數值的工具。這正是 ASCII Converter 所做的事。

how to convert ascii to integer
how to convert ascii to integer

「將 ASCII 轉換為整數」真正的含義

ASCII 為其 128 個字元中的每一個都指派了一個唯一的整數。32 個控制碼佔據十進位 0 到 31,可列印的空白字元位於 32,接著是依序分組排列的標點符號、數字與字母,最後是由 127 的 DEL 控制碼將非列印字元的總數湊成 33。整數就只是字元在該表中的位置——沒有需要背誦的公式,只需要一個固定的對照表。大多數參考表會以三個欄位來呈現對應關係:十進位、十六進位,以及字元本身。

就實務工作而言,你最常見到的整數集中在三個熟悉的區塊:

  • 空白字元是 32,"!" 是 33,數字 "0" 到 "9" 連續排列,從 48 到 57,而 ":" 是 58。
  • 大寫 "A" 到 "Z" 佔據 65 到 90,每個字母恰好對應一個整數,依字母順序排列。
  • 小寫 "a" 到 "z" 佔據 97 到 122,同樣連續且依字母順序排列。

由於數字和字母都整齊地排在一起,你常常可以不必查表就預測出附近字元的整數。大寫與小寫之間的差距正好是 32(97 − 65 = 32),這也是為什麼許多程式語言會透過加或減 32 來轉換大小寫。一旦你知道了這些區段的起點與終點,幾乎所有其他可列印的值都可以靠數數字得出來。

十進位範圍:為什麼 0 到 127 就是全部

ASCII 是一個 7 位元碼,因此它定義了 27 = 128 個位置,而十進位 0 到 127 就是完整的範圍。128 到 255 之間的數值並不屬於標準 ASCII——它們屬於「延伸 ASCII」編碼家族,例如 Windows-1252 或 ISO-8859-1,這些編碼會在同樣的數值範圍內指派不同的字元。這就是為什麼「延伸 ASCII」這個詞可能指的是互不相容的代碼頁:同一個數值位置在不同的代碼頁下可能對應到完全不同的字元。把這些數值當作標準 ASCII 處理,是老舊系統中文字變成亂碼最常見的原因之一。

ASCII Converter 會強制執行嚴格的 0–127 界線,而不是自行猜測。編碼時會在遇到第一個超出 7 位元 ASCII 的字元時拒絕處理,並回報它的位置,讓你在長篇輸入中能找出問題所在。解碼時則要求使用純粹的無正負號十進位整數,並會拒絕帶正負號的數字、分數、像 0x 這樣的十六進位前綴、空白的詞元,以及超過 127 的數值。用來釐清實作的八個標準測試值,分別是下界 (0)、TAB (9)、LF (10)、空白 (32)、數字零 (48)、大寫 A (65)、小寫 a (97),以及上界 (127),符合 RFC 20 與 Unicode 對照表中的指派。供參考之用,ASCII 範圍的結構如下:

十進位範圍內容
0–31C0 控制字元(NUL、TAB、LF、CR、ESC 等)
32空白
33–47標點符號:! " # $ % & ' ( ) * + , - . /
48–57數字 0–9
58–64標點符號:: ; < = > ? @
65–90大寫字母 A–Z
91–96標點符號:[ \ ] ^ _ `
97–122小寫字母 a–z
123–126標點符號:{ | } ~
127DEL 控制字元

輸入上限為 100,000 個 UTF-16 字碼單元,解碼時則限制為 50,000 個字碼,因此即使是多頁的 ASCII 文件也能在單一次處理中完成轉換而不會觸及界線。所有運作都在當前的瀏覽器分頁中進行,確保私密文字與專屬輸入不會離開你的電腦。

如何將 ASCII 轉換為整數(以及反向轉換)

要從 ASCII 文字快速取得精確的十進位整數——或從整數清單重建 ASCII 文字——最快的做法就是使用 ASCII Converter。處理過程在當前的瀏覽器分頁中進行,因此不會上傳任何資料。請依照下列步驟,無論哪個方向都能獲得乾淨的轉換結果:

  1. 開啟 ASCII Converter 並選擇方向。選擇 text to codes 將 ASCII 字元轉換為十進位整數清單,或選擇 codes to text 將十進位整數清單解碼回精確的 ASCII 字元。
  2. text to codes 模式中,於輸入區中輸入或貼上僅含 ASCII 的文字。工具會將輸入視為純 7 位元 ASCII,並依序為每個字元指派一個十進位整數。
  3. codes to text 模式中,輸入範圍在 0 到 127 之間的十進位整數,以空格、逗號或換行分隔。必須使用純粹的無正負號整數;像 +65、65.0 或 0x41 這類數值會被拒絕,並顯示明確的錯誤訊息。
  4. 點選 Convert ASCII。工具會驗證每個字元或每個詞元,執行轉換,並在輸入超出 7 位元範圍或詞元數過多時顯示清楚的錯誤。
  5. 讀取結果。在 text to codes 模式下,輸出是以空格分隔的十進位整數清單;在 codes to text 模式下,輸出則是重建後的 ASCII 字串。使用複製控制項即可將結果移至你的編輯器、終端機或原始碼中。

舉一個快速的範例,請看兩個字元的字串 "Hi"。查表得知:"H" 是 72,"i" 是 105,因此轉換器會回傳十進位整數 72 105。將 72 105 再次輸入 codes-to-text 模式,即可精確重建原本的字串。這種來回轉換是驗證你手上的整數是否對應到預期字元最乾淨的方式,而且之所以可行,是因為這個對應關係是一個雙射——0–127 中的每個字碼單元都能唯一對應到一個字元並且可以還原。

常用 ASCII 整數值一覽

大多數的 ASCII 轉整數工作只需要少數幾個數值。下方表格涵蓋了幾乎在每個專案中都會出現的常數——一邊是可列印字元的錨點,另一邊是重要的控制碼。當你對某個對應關係不確定時,可以用它來快速查閱,或用來與轉換器的輸出互相核對。

字元十進位為何重要
(空白)32數字區段之前唯一可列印的字元
"0"48連續數字區段 48–57 的起點
"9"57數字區段的終點
"A"65大寫字母區段 65–90 的起點
"Z"90大寫字母區段的終點
"a"97小寫字母區段 97–122 的起點
"z"122小寫字母區段的終點
NUL0ASCII 範圍的下界
TAB9水平定位字元,在輸出文字區中常常看不見
LF10換行字元,Unix 系列系統的標準換行符號
CR13歸位字元,在 Windows 與舊版 Mac 檔案中會與 LF 搭配使用
DEL127ASCII 範圍的上界

十進位整數 vs 十六進位、二進位與八進位

同一個 ASCII 字元可以用多種進位表示,而你所看到的整數取決於你正在閱讀哪一種進位。字母 "A" 在十進位是 65,十六進位是 0x41,八進位是 101,二進位是 1000001。十進位整數通常最容易閱讀,也最容易跨系統比較,這也是為什麼大多數文件以及大多數高階程式語言在討論 ASCII 數值時,預設使用十進位。十六進位更為精簡——每個 7 位元的數值都恰好可以用兩位十六進位數字表示——並且是記憶體傾印、色彩代碼以及低階程式碼中的標準格式;二進位則最適合用來說明位元模式,例如區分 ASCII 與延伸編碼的高位元。

進位"A" 的表示形式出現的場合
十進位65一般閱讀、大多數高階程式設計
十六進位0x41記憶體傾印、色彩代碼、低階程式碼、HTML 與 CSS 的跳脫序列
八進位101舊版 Unix 檔案權限、部分 C 字串跳脫序列
二進位1000001位元層級的文件、用於說明 7 位元範圍

如果你想將同一份輸入進一步轉為十六進位或二進位,ASCII Converter 會先給你一份乾淨的十進位清單,而我們 decimal-to-hex guide 中的延伸教學,會說明如何在不損失精度的前提下,將這些整數讀成 0x 形式。反向的部分——將整數清單轉回它們所代表的字元,並進一步說明詞元格式與控制字元——則收錄於 decimal codes to text 教學中。

什麼時候十進位整數不是合適的工具

ASCII 規模本來就很小。如果你的文字包含帶有腔調的字母(例如 é 或 ñ)、非拉丁文字的字元、表情符號,或任何超出可列印 ASCII 區塊的標點符號,這些字碼點就沒有對應的 ASCII 整數,轉換器會在遇到第一個違規字元時拒絕處理,而不是自行編造數值。當你面對的是以 UTF-8、Windows-1252、ISO-8859-1 或其他具名代碼頁編碼的位元組時也是如此:像 é 這樣的單一字元,在 Windows-1252 中可能是一個位元組,在 UTF-8 中是兩個位元組,在 Latin-1 中又是另一個位元組,而 ASCII Converter 並不是用來釐清這些差異的合適工具。對於 Unicode 字碼點、多位元組編碼,或是依地區而異的轉換,請改用具體標明所使用編碼方式的轉換器,而不是把輸入當作 ASCII 來處理。嚴格的 0–127 界線是一項特色而非限制:它能保證你得到的整數對應到一個通用標準,任何實作了 RFC 20 的系統都能讀取這些整數,而不會對某個整數究竟代表哪個字元產生任何模糊之處。