若要將 32 位元二進位 IPv4 位址轉換為點分十進位表示法,請將 32 個位元由左至右分成四個連續的 8 位元八位元組,並將每個八位元組寫成介於 0 到 255 之間的十進位數值,組與組之間以句點分隔。點分十進位形式是同一個 32 位元樣式更具可讀性的呈現方式,而無符號 32 位元整數則是呈現同一 32 位元的另一種方式。從概念上來說,IPv4 位址 a.b.c.d 對應的整數為 a × 256³ + b × 256² + c × 256 + d,因此 192.168.1.1 等於 192 × 16,777,216 + 168 × 65,536 + 1 × 256 + 1 = 3,232,235,777。一旦得到該整數,將其轉回點分十進位的過程就是任何支援安全整數的計算機都能在不產生浮點數誤失的情況下執行的簡單算術。IP 轉十進位轉換器 會在瀏覽器中為你執行最後這個步驟,把一個介於 0 到 4,294,967,295 的無符號整數精準地拆成四個基底 256 的分量,既不進行四捨五入,也不發送任何網路請求。

how to convert ip address from binary to dotted decimal
如何將二進位 IPv4 轉換為四個八位元組

二進位、整數與點分十進位形式描述的是同一組 32 個位元

IPv4 位址在 RFC 791 中定義為一個 32 位元的量,而它的任何表示法——點分十進位、純無符號整數、十六進位或二進位——都只是書寫同一組 32 位元的不同方式。點分十進位形式將位址寫成四個以句點分隔的八位元組,其中每個八位元組是八個連續位元的無符號十進位數值。二進位形式則將同一組 32 位元寫成 0 與 1,通常為了可讀性而分成四組各八個位元。無符號 32 位元整數形式則將同一組 32 位元視為一個以 2 為基底的數字,再以 10 為基底寫出來。

由於這三種表示法描述的是同一個 32 位元值,從二進位轉換為點分十進位就簡化為兩個運算。首先,將 32 個位元視為單一無符號二進位數字,並將該數字轉換為其無符號十進位等效值,結果會落在 0 到 4,294,967,295 之間。其次,將該十進位整數拆回四個基底 256 的分量——先是最高位元組,其次是下一個,再下一個,最後是最低位元組。

第一個運算是每篇二進位轉十進位教學文章都會教的內容。第二個運算則是 IP 轉十進位轉換器所執行的部分,也是手動計算時最容易出錯的部分,因為跨越相同邊界時容易發生進位與位元組順序的錯誤,這也是其他情境中常造成大端序與小端序混淆的原因。RFC 791 定義的點分形式將最高有效八位元組放在最前面,因此這個轉換是固定的:沒有需要記住的小端序變體,書寫四個群組的順序永遠與讀取位元的順序相同。

將二進位 IP 位址轉換為四個八位元組

  1. 找出或貼上你的 IPv4 位址所對應的 32 位元二進位字串,是否以句點或空格分隔四個八位元組皆可。
  2. 將 32 個位元視為單一無符號二進位整數讀取。如果你想要複習二進位轉整數的算術過程,請參閱 將二進位 IP 位址轉換為十進位整數 的相關教學,或使用任何經過驗證的二進位轉十進位計算機。
  3. 開啟 IP 轉十進位轉換器,並將方向切換為十進位轉 IPv4。
  4. 將無符號整數貼入輸入欄位中,且不含空格、符號、小數點、前導零或任何尾隨字元。
  5. 點擊「轉換」按鈕,讀取工具所顯示的四個八位元組點分十進位結果。
  6. 將結果複製到你的目的地——資料庫欄位、設定檔、記錄項目或測試固件——並確認目的地將其儲存為無符號 32 位元型別、寬度更大的整數,或經驗證的十進位字串。

這個工具不直接接受二進位輸入;它在整數端期望接收的是十進位整數。這是有意為之的設計,因為轉換器內部的嚴格整數解析器能夠捕捉到手寫的二進位解析器經常漏掉的輸入類型——超出 0 到 4,294,967,295 範圍的值、缺少的八位元組、負號、十六進位記法,以及含混的前導零。以整數形式進行處理也能讓工具保持小巧且快速,完全依賴 JavaScript 精確安全整數範圍內的整數運算,使 0 到 4,294,967,295 之間的每個 IPv4 值都能在沒有浮點四捨五入的情況下表示。

為何此工具避免四捨五入與八進位歧義

浮點數運算是在 IP 轉換程式碼中常見的隱性錯誤來源,這正是此工具完全依賴 JavaScript 精確安全整數範圍內整數運算的原因,使 0 到 4,294,967,295 之間的每個 IPv4 值都能在沒有浮點四捨五入的情況下表示。IP 轉十進位轉換器在 JavaScript 的安全整數範圍內完全使用整數運算執行轉換,因此 0 到 4,294,967,295 之間的每個 IPv4 值都能精確表示。過程中沒有四捨五入步驟、沒有 IEEE-754 轉換,也沒有在 32 位元範圍邊界上的精度損失。

八進位歧義是第二個、也較古老的問題。許多舊版解析器與程式語言會將數字詞元的前導零解讀為以 8 為基底的前綴,因此 010.0.0.1 在某些環境中歷史上會被讀成十進位的 8.0.0.1,而在其他環境中則被讀成十進位的 10.0.0.1。此工具透過拒絕任何帶有前導零的輸入八位元組來迴避這種歧義,因此 010.0.0.1、192.168.001.1 與 001.002.003.004 在任何算術開始之前都會被拒絕。值 0 本身仍然允許,因為單一數字零這個字面值並沒有需要消歧的前導零位數。

這些嚴格的規則涵蓋了手寫程式碼中會默默產生錯誤答案的情況:缺少的八位元組、超過 255 的八位元組、帶正負號的整數、分數、十六進位記法、前後空白字元,以及 CIDR 後綴。像 192.168.1.1/24 這樣的值會被直接拒絕,而不是被默默地截斷為 192.168.1.1,因為 CIDR 前綴會改變位址的意義,屬於另一種不同的計算。反向轉換時也套用同樣的嚴格標準:像 4294967296 這樣的十進位值會被拒絕,因為它超過了無符號 32 位元上限;而像 007 這樣的值也會被拒絕,因為前導零在不同的解析器之間具有歧義。

工具接受與拒絕的格式

輸入格式範例結果
純點分十進位 IPv4192.168.1.1接受
純無符號 32 位元整數3232235777接受
前後帶有空格的 IPv4" 192.168.1.1 "拒絕
帶前導零的 IPv4192.168.001.1拒絕
帶 CIDR 後綴的 IPv4192.168.1.1/24拒絕
負整數-1拒絕
超過 4294967295 的十進位值4294967296拒絕
十六進位記法0xC0A80101拒絕

此工具刻意保持範圍狹窄。它只處理個別的 IPv4 位址;不會解析 CIDR 前綴、子網路遮罩、通訊埠號、主機名稱、IPv6 位址或任意大小的整數。像 example.com 這樣的主機名稱,或是 128 位元的 IPv6 字串,都會被拒絕而不是被默默忽略。若需要計算網路與廣播邊界或主機數量,請改用 子網路計算機。若需要符合 RFC 4291 的 IPv4 對應 IPv6 表示法,請使用獨立的 IPv4 轉 IPv6 工具,因為將整數轉為點分十進位並不會產生 IPv6 連線能力。

跨程式語言與資料庫的儲存與排序

儲存表示法數值範圍排序行為
帶正負號的 32 位元整數-2,147,483,648 到 2,147,483,647數值;高位元值會顯示為負數
無符號 32 位元整數0 到 4,294,967,295數值;涵蓋完整 IPv4 範圍
寬度更大的整數(64 位元)遠超過 IPv4數值;最能防範溢位
十進位字串0 到 4,294,967,295 以文字形式字典序;「10」排在「9」之前
點分十進位字串四個 0 到 255 的數字以文字形式字典序;不會依網路順序排序

對於正式環境的遷移作業,請將一批轉換後的樣本值與目的地語言中維護良好的 IP 位址程式庫進行比對——Python 的 ipaddress.IPv4Address 在 docs.python.org 有相關文件——並在批次轉換之前驗證資料庫欄位的邊界。在需要可稽核性的情況下,請一併保留原始的點分十進位字串與整數,並記錄你的程式碼所期望的表示法,讓未來的讀者不必反推當初的選擇。

這個轉換作業對於二進位通訊協定註記、測試固件、防火牆匯出檔、試算表,以及任何以數值方式排序或比較位址的系統也很有用。私用、迴路、群播、說明、保留與公用位址都會以相同的算術進行轉換,因此單憑較高的十進位值本身並不能作為某個位址可路由、有指派或適合用於存取控制規則的證據。當涉及位址分類時,請另外套用目前的位址註冊機構資料與網路政策。

若想進一步了解,請參閱 Xbox Series S 的 IPv4 轉 IPv6:實務逐步指南。