ToolAct工具行動

進制轉換工具

線上進制轉換工具,支援二進制、八進制、十進制、十六進制及自訂進制互轉

輸入內容
轉換結果
二進制 (2)
八進制 (8)
十進制 (10)
十六進制 (16)

輸入進制

什麼是進制轉換?

進制轉換是將一個數字從一種數制表示法轉換為另一種表示法的過程。常見的進制包括二進制(基數2)、八進制(基數8)、十進制(基數10)和十六進制(基數16)。

在計算機科學中,二進制是最基本的數制,因為計算機內部所有資料都以二進制形式儲存。十六進制常用於表示記憶體位址和顏色值,因為它比二進制更緊湊且易於閱讀。八進制在Unix檔案權限等場景中也有廣泛應用。

使用方法

使用方法

  1. 在輸入欄中輸入要換算的數字(例如:255、FF、11111111)
  2. 選擇輸入數字的進位制:二進位、八進位、十進位、十六進位或自訂進位制
  3. 工具會自動將輸入轉換為二進位、八進位、十進位和十六進位的結果
  4. 點選任意結果旁的「複製」按鈕將其複製到剪貼簿

換算提示

  • 請確認輸入的數字元合所選進位制的有效範圍;例如二進位僅接受 0 和 1,而十六進位接受 0-9 和 A-F。
  • 大型整數在某些工作流程中可能超出 JavaScript 的安全數字範圍,因此關鍵工程數值請使用專用的任意精度工具驗證。

使用場景

同時以多種程式設計進制檢視同一個整數選擇二進位、八進位、十進位、十六進位或 2 到 36 之間的自訂進制,然後一次查看同一個值在 base 2、8、10 和 16 下的結果。每個輸出都可獨立複製,貼入原始碼、文件片段、暫存器表格或審查評論中,這些場景常需要將同一個數字並列顯示為兩種進制。
轉換來自日誌、暫存器和通訊協定筆記的值用於權限遮罩、裝置暫存器、小型數字 ID、類顏色值、位元旗標和從文件複製的範例,這些場景中同一個數字用另一種進制表示更容易理解。轉換完全在頁面內進行,因此內部暫存器位址、操作碼值或規格片段可以在不透過任何外部服務傳送的情況下查閱。
將工具限制在整數轉換範圍內頁面使用 JavaScript 的 parseInt 和 Number.toString,最適合普通的無符號整數表示。非常大的整數、分數值、負數二進位形式和二的補碼解讀仍需要領域專用的計算器。
逐位解讀位元旗標組合將權限遮罩或暫存器值轉換為二進位,然後每 4 或 8 位元一組來讀取個別旗標,如 0x1F0 或 0b1010_0001。在記錄 POSIX 權限位元、GPIO 暫存器或功能旗標時很有用,這些場景中每個位元都有名稱含義,單看整數值無法得知。分組規則依賴二進位與十六進位之間 2^4 = 16 的關係,因此每 4 位元始終對應一個十六進位數字,每 3 位元對應一個八進位數字;補上前導零才能讓 8 位元組(0xFF)整齊對齊兩個十六進位數字,而非縮成一個。
明確處理二的補碼和有符號位元寬度當來源值是有符號的 int8、int16 或 int32 時,請記住頁面回傳的是無符號表示。在解讀來自通訊協定傾印、結構欄位或韌體日誌的負值時,需使用感知寬度的公式手動轉換。二的補碼意味著一個寬度為 w 位元的值 `v`,若其最高位元為 1,則表示 `v - 2^w`,因此 8 位元組 `0xFF` 無符號為 255、有符號為 -1,16 位元字 `0x8000` 為 -32768。補上前導零對固定寬度欄位(如 MAC 位址、IPv6 十六進位組或 24 位元顏色通道)很重要,而分數進制轉換(例如十進位 `0.625` 轉二進位 `0.101`)不受 parseInt/toString 支援,需要獨立演算法。

技術原理

進制轉換是位置記數法的算術運算。在 b 進制中,位置 p 上的數字 d 對總值的貢獻為 d × bᵖ,一個 N 位數的值為 Σᵢ₌₀..N₋₁ dᵢ × b^(N-1-i)。十進制是 10 進制,二進制是 2 進制,八進制是 8 進制,十六進制是 16 進制。兩個演算法完成所有工作:從 b₁ 進制轉換為十進制,計算多項式值(Horner 方法是標準的就地形式:`value = value * b₁ + digit`);從十進制轉換為 b₂ 進制,反覆除以 b₂ 並收集餘數,然後反轉。兩個演算法每個位元都是 O(N),額外空間為 O(1),適用於 2 到 36 的任何進制(數字 '0'-'9' + 'A'-'Z' 表示 10-35)。 大多數實務的進制轉換會跳過中間的十進制步驟,直接在二的冪次方之間轉換。二進制 ↔ 八進制每 3 個二進位數字對應 1 個八進位數字(因為 2³ = 8),二進制 ↔ 十六進制每 4 個二進位數字對應 1 個十六進位數字(2⁴ = 16)。這就是為什麼 0xFF = 11111111₂,0755(八進制,Unix 檔案權限)= 111101101₂ = 493 十進制。本頁面還處理 base 32(RFC 4648 §6,用於某些認證權杖)和 base 36(傳統的緊湊 URL 短網址字母 '0'-'9' + 'A'-'Z'),其中轉換為二進制是唯一合理的方式,因為 36 不是 2 的冪次方。 本頁面使用 JavaScript 內建的 parseInt(value, base) 進行解析,(123).toString(base) 進行輸出。兩者都受限於 Number 精度:IEEE 754 binary64 有 53 位元尾數,因此大於 2⁵³ - 1 = 9,007,199,254,740,991 的整數值會失去精度。例如,Number.MAX_SAFE_INTEGER + 1 等於 Number.MAX_SAFE_INTEGER + 2——這兩個大數值無法精確表示。對於任意精度的整數進制轉換,BigInt 是現代方案:BigInt 中的 parseInt 邏輯很直觀,BigInt.prototype.toString(base) 可處理 2 到 36 的任何進制。加密函式庫、UUID 產生器和大數運算(BIP-32 HD 錢包、RSA 金鑰)都因此使用 BigInt。 同一演算法也能處理有符號數和浮點數,但有其限制。在二的補碼(自 1965 年 IBM System/360 設計以來的主流有符號整數表示法,所有現代 CPU 均採用)中,-1 為全 1(32 位元為 0xFFFFFFFF,64 位元為 0xFFFFFFFFFFFFFFFF),最高位元為符號位。要將負的二的補碼整數轉換為十進制,減去 2ⁿ(n 為位元寬度)。對於浮點數,IEEE 754 binary64 儲存符號(1 位元)、指數(11 位元,偏移值 1023)和尾數(52 位元,隱含前導 1)。因此任意 binary64 的十進制轉換並不精確——IEEE 754 中的 0.1 是 0.1000000000000000055511151231257827021181583404541015625,這就是為什麼金融程式碼使用整數的分或十進制函式庫而非浮點數。

  • 位置記數法:在 b 進制中,位置 p 上的數字 d 貢獻 d × bᵖ。一個 N 位數的完整值為 Σᵢ dᵢ × b^(N-1-i)。Horner 方法以 O(N) 時間和 O(1) 空間計算:`value = value * b + digit`。
  • 從十進制轉換為 b 進制:反覆除以 b 並收集餘數;反向讀取即得目標表示法。演算法對於 N 位輸出為 O(N)。
  • 直接二進制 ↔ 十六進制轉換:每個十六進位數字正好是 4 個二進位數字,因此 0xFF = 11111111₂。二進制 ↔ 八進制:每個八進位數字是 3 個二進位數字,因此 0755 = 111101101₂。
  • 二的補碼(所有現代 CPU 用於有符號整數):高位元為符號位,負數編碼為 2ⁿ - |x|。32 位元二的補碼中的 -1 為 0xFFFFFFFF。
  • IEEE 754 binary64(JavaScript Number):1 位元符號 + 11 位元偏移指數(偏移值 1023)+ 52 位元尾數(隱含前導 1)。最大安全整數為 2⁵³ - 1 = 9,007,199,254,740,991;超出此值的數失去精度。
  • parseInt(value, base) 和 Number.prototype.toString(base) 支援 2-36 進制,使用 53 位元 Number 尾數。需要任意精度時,使用 BigInt('value', base) 和 BigInt.prototype.toString(base)。
  • Base 32(RFC 4648 §6)和 Base 36('0'-'9' + 'A'-'Z')需要以二進制作為中間步驟,因為 32 和 36 不是 2 的冪次方——一個數字不對應固定的位元數。
  • 邊界情況:負進制或二的補碼中負數的帶餘整數除法需要符號處理;本頁面將輸入視為無符號絕對值,並在最終結果上重新套用符號。

範例

十進位轉十六進位

輸入:  255(十進位)
輸出:  FF(十六進位)
說明:  常見於 CSS 色彩值,例如 #FF0000 代表紅色

二進位轉十進位

輸入:  11111111(二進位)
輸出:  255(十進位)
說明:  8 位元二進位的最大值,也就是無號位元組的最大值

十六進位轉二進位

輸入:  1A3F(十六進位)
輸出:  1101000111111(二進位)
說明:  每 4 位二進位對應 1 位十六進位

八進位轉十六進位

輸入:  377(八進位)
輸出:  FF(十六進位)
說明:  Unix 權限 377(rwxrwxrwx)等於十六進位 FF

自訂進位(36 進位)

輸入:  ZZ(36 進位)
輸出:  1295(十進位)
說明:  36 進位使用 0-9 與 A-Z;ZZ 是該系統中最大的兩位值

常見問題

支援哪些進位?

二進位(base 2)、八進位(base 8)、十進位(base 10)、十六進位(base 16),以及 2 至 36 之間任何自訂進位。超過 36 進位需要更多字元組成的字母表,超出本工具範圍。

高進位中的字母怎麼用?

10 以上的進位會用到字母:在十六進位中 A=10、B=11、…、F=15;在 36 進位中 A=10 一路到 Z=35。輸入大小寫皆可,輸出預設為大寫。

要怎麼換算負數或小數?

負整數可以直接輸入——本頁內部以 JavaScript BigInt 或帶號整數儲存。小數值(例如十進位 0.5 → 二進位 0.1)也支援,但因為浮點精度的關係,大致只能保留 15 位有效數字。

二補數和帶號數值有什麼不同?

二補數是電腦表示負整數的方式——最高位代表負號,其餘位元配合一個偏移量編碼數值。帶號數值則只是把符號位翻過來。本頁顯示的是帶號數值(類似十進位的負號表示),而不是位元樣式。若需要看二補數,請使用程式設計師模式的計算機。

為什麼我的十六進位結果與其他工具的位數不同?

十六進位值要不要左補零到位元組/字組邊界並沒有強制規定,0xff 與 0x000000FF 是同一個數字,只是顯示時補零方式不同。本頁不會自動補零;如果你的應用情境(如固定長度的 MAC 位址、IPv6 區段)需要前導零,請自行加上。

數字大小有上限嗎?

JavaScript BigInt 可以處理任意大小的整數,因此不同進位之間的整數轉換在實務上沒有長度限制。小數轉換則受 Number 的 15–17 位有效數字限制。

可以在這裡換算 IP 位址或顏色碼嗎?

間接可以:請逐位元組換算。點分四段的 IP 位址,把每個八位元組分別由十進位換成十六進位;#RRGGBB 的顏色碼則拆成三組位元組對。如果想要自動解析,請使用專門的 IP 與顏色工具。