你輸入的每個字元,不管是英文字母還是標點符號,最終都會以一連串 0 和 1 儲存在記憶體中。電腦本身不懂人類語言,只認得 binary 數字。編碼標準負責把每個字元對應到一個特定數字,再轉成 binary。文字轉 binary 轉換,就是把這個對應關係攤開來看。
為什麼電腦使用 Binary
電腦由電晶體組成,這些微小的電子開關只有「開」跟「關」兩種狀態。開就是 1,關就是 0。所有資料都是這兩種狀態的排列組合。
為什麼偏偏選兩種狀態?因為電子元件要可靠地區分兩個電壓高低很容易,但如果在極小的晶片裡要區分十個電壓等級,錯誤率會飆升。兩種狀態是工程上最務實的做法。
文字如何被編碼為 Binary 數字
要儲存文字,電腦需要一張對照表,把每個字元指定一個數字。最關鍵的標準是 ASCII(American Standard Code for Information Interchange,美國資訊交換標準碼),1963 年發布。
ASCII 用 0 到 127 的數字代表各個字元。大寫「A」是 65,小寫「a」是 97,數字「5」是 53,空格是 32。
把字元轉成 binary,就是把它的 ASCII 數字轉成二進位。65 轉出來是 01000001,共八個位數,稱為 bit。一個 byte 有 8 個 bit,可以表示 0 到 255 的值,比 ASCII 的 128 個字元所需的範圍還大。
ASCII 轉 binary 對照表
| 字元 | ASCII 十進位 | Binary |
|---|---|---|
| A | 65 | 01000001 |
| B | 66 | 01000010 |
| a | 97 | 01100001 |
| z | 122 | 01111010 |
| 0 | 48 | 00110000 |
| 9 | 57 | 00111001 |
| 空格 | 32 | 00100000 |
| ! | 33 | 00100001 |
單字「Hi」的 binary 表示:01001000 01101001。「H」是 72,佔八個 bit;「i」是 105,也佔八個 bit。
ASCII 和 UTF-8 的差別
ASCII 涵蓋 128 個字元,英文夠用,但世界上大部分文字系統都涵蓋不到。UTF-8 在 1993 年推出,就是為了補這個缺口。
UTF-8 向下相容 ASCII:code point 低於 128 的字元使用同樣的單一 byte。超出範圍的字元則用 2 到 4 個 byte 表示。中文字「中」的 Unicode code point 是 U+4E2D,UTF-8 編碼為三個 byte:11100100 10111000 10101101。
UTF-8 目前處理超過 14 萬個字元,涵蓋 159 種書寫系統。根據 W3C Web Almanac 統計,截至 2024 年約有 98% 的網頁使用 UTF-8。你在現代應用程式裡輸入文字時,背後幾乎都是 UTF-8 在運作。
文字轉 Binary 的轉換流程
轉換過程是固定的:
- 逐一取出文字中的每個字元。
- 找到該字元的 Unicode code point(ASCII 字元的 code point 和 ASCII 編號一致)。
- 用 UTF-8 將 code point 編碼為 byte。
- 把每個 byte 轉成 8-bit binary 表示。
拿「Cat」當例子:
- C → 67 →
01000011 - a → 97 →
01100001 - t → 116 →
01110100
結果:01000011 01100001 01110100
想即時將文字轉成 binary,可以用免費的文字轉 Binary 工具。貼上文字就能拿到 binary 輸出,不用手動查表。
從 Binary 轉回文字
解碼步驟正好反過來。把每組 8 個 bit 取出,binary 轉成十進位數字,再查表找到對應字元。
01000001 → 65 → 「A」
編碼和解碼必須用相同標準。如果用 UTF-8 編碼,卻拿 Latin-1 來解碼,超出 ASCII 範圍的字元就會變成亂碼。這種問題叫 mojibake(文字化け),在早期 email 程式和沒有記錄編碼方式的資料庫中很常見。
文字轉 Binary 轉換的應用場景
程式設計課程常用它來教資料型別和 bitwise 運算。用 Wireshark 做網路協定除錯時,需要看到 byte 層級,搞清楚哪些 bit 對應哪些字元。CTF(Capture the Flag)資安競賽也常用 binary 編碼訊息。隱寫術(steganography)把文字的 bit 塞進像素值的最低有效位,藏文字在圖片裡。密碼學的 hash 函式對輸入文字的 binary 表示做運算,所以編碼方式一致才能產生一致的 hash。
FAQ
字母 A 的 binary 碼是什麼?
大寫「A」的 ASCII 值是 65,8-bit binary 是 01000001。小寫「a」的十進位值是 97,binary 是 01100001。ASCII 替大寫和小寫字母分配了不同的 code point,所以 binary 也不同。
Binary 和 ASCII 是一樣的嗎?
不一樣。Binary 是只用 0 和 1 的數字系統,ASCII 是把字元對應到數字的編碼標準。文字轉 binary 時,先用 ASCII 或 UTF-8 取得字元的數字,再把數字轉成 binary。一個是格式,一個是對應規則。
一個字元在 binary 中佔幾個 bit?
標準英文字母、數字和基本標點在 ASCII 和 UTF-8 中都佔 8 個 bit(1 byte)。帶重音的拉丁字母和不少貨幣符號用 2 個 byte,大多數亞洲文字用 3 個 byte,emoji 和部分罕用文字用 4 個 byte。