IPv4 位址透過單一 base-256 加總運算可轉換為 8 位數的十六進位值:四個位元組中的每一個都是一個位元組,第一個位元組佔最高有效 8 個位元,而你在過程中得到的 0 到 4294967295 這個整數,正是同一個位址的精確十進位形式。
一旦你將點分十進位表示法視為四個已封裝的位元組,將 IP 位址轉換為十六進位就相當直觀。每個位元組的範圍從 0 到 255,並精確對應到兩個十六進位數字(00 到 FF),因此 192.168.1.1 會變成 C0A80101,而 127.0.0.1 會變成 7F000001。最乾淨的轉換路徑是先使用 base-256 算術將 IPv4 轉為其無符號 32 位元整數,再將該整數呈現為八個十六進位數字。base-256 公式 a×256³ + b×256² + c×256 + d 會產生一個完整描述該位址的單一十進位數值,而將該數值反除回四個 base-256 分量,即可還原出原始的位元組。IP 轉十進位轉換器會在 JavaScript 的安全整數範圍內精確執行此運算,不會產生捨入、不會進行 DNS 查詢,也不會因為前置零而產生任何歧義。接下來的十六進位呈現,則是一道關於位置記數法的基礎練習題,你可以在紙上或任何支援十六進位格式指定符的程式語言中完成。

十進位與十六進位形式所代表的意義
根據 RFC 791,IPv4 位址是一個以點分十進位撰寫、以供人閱讀的 32 位元標籤。同一組 32 個位元可以用任何進位制來表示。在 base 10(十進位)中,你會得到一個 0 到 4294967295 之間的整數。在 base 16(十六進位)中,由於每個十六進位數字涵蓋 4 個位元,而 4 位元乘以 8 等於 32 位元,因此最多可得到 8 位數字。這兩種檢視方式之間的對應是精確的:沒有任何位元遺失、重排或被捨入,因為兩種表示法只是同一個 32 位元樣式的不同呈現方式。
十進位形式方便進行算術運算,也方便儲存在需要依數值大小排序的欄位中。十六進位形式則方便用於程式碼、封包擷取、組態設定片段,以及任何需要一眼讀取 32 位元欄位而無需以句點分隔之處。這兩種形式描述的都是同一個位址,本身並未附加任何額外的網路意義。私有、回送、多點傳送、文件用途、保留以及公網位址,全部都使用相同的算術進行轉換,因此所產生的十進位或十六進位數值本身,並不足以作為該位址可路由、安全或適用於任何存取控制規則的證據。
| 位元組位置 | 乘數 | 十進位值 |
|---|---|---|
| 1 (a) | 256³ | 16,777,216 |
| 2 (b) | 256² | 65,536 |
| 3 (c) | 256¹ | 256 |
| 4 (d) | 256⁰ | 1 |
如何將 IPv4 位址轉換為十六進位
從點分十進位位址到十六進位字串的路徑分為兩個階段。第一階段使用轉換器產生精確的十進位整數。第二階段則是一個簡短的十六進位格式化步驟,你可以手動完成或在程式碼中完成。
- 開啟 IP 轉十進位轉換器,並選擇「IPv4 轉十進位」方向,使欄位可接受點分十進位位址。
- 輸入嚴格格式的位址,由四個以句點分隔的十進位位元組組成,不要有前後空白、不要加上 /CIDR 後綴,也不要有前置零(因此應輸入 192.168.1.1,而非 192.168.001.1)。
- 執行轉換並讀取所顯示的整數。確認它是一個落在 0 到 4294967295 範圍內的無符號數值。
- 複製十進位結果,並將每個位元組呈現為兩個十六進位數字,必要時以前置 0 補齊(例如 192 → C0,1 → 01),再將四對數字串接成一個 8 字元的字串。
- 將十六進位值貼到目標欄位中,並確認它是以無符號 32 位元值、寬度更大的整數,或經過驗證的字串形式儲存,以免日後發生有符號溢位的情況。
如果你已經有十進位整數而想要取得十六進位形式,請在轉換器中選擇「十進位轉 IPv4」方向,貼上整數,讀取四個位元組的結果,再將每個位元組轉換為兩個十六進位數字。十進位形式是點分十進位文字與十六進位數字之間的橋樑,因為兩者都是同一個 32 位元樣式的精確、無損呈現。
範例解析:192.168.1.1 的三種表示形式
以位址 192.168.1.1 為例。使用 base-256 公式以及上表的乘數,可計算出十進位值為 192 × 16,777,216 + 168 × 65,536 + 1 × 256 + 1 × 1。第一個乘積是 3,221,225,472;第二個是 11,010,048;第三個是 256;第四個是 1。全部相加得到 3,221,225,472 + 11,010,048 + 256 + 1 = 3,232,235,777。
若要取得十六進位形式,請逐一轉換每個位元組。192 的 base 16 表示為 C0(12 × 16 + 0),168 是 A8(10 × 16 + 8),1 是 01,1 也是 01。按照與位元組相同的順序將四對數字串接起來,就會得到 C0A80101。如果你直接將完整的整數 3232235777 轉換為十六進位,也會得到同樣的八位數字,因為兩種途徑描述的是同一組 32 個位元。回頭轉換為點分十進位的過程,則是將 C0A80101 分割為 C0、A8、01、01,再將每一對分別轉譯回十進位。
| 點分十進位 | 十進位 (0–4,294,967,295) | 十六進位 |
|---|---|---|
| 0.0.0.0 | 0 | 00000000 |
| 10.0.0.1 | 167,772,161 | 0A000001 |
| 127.0.0.1 | 2,130,706,433 | 7F000001 |
| 192.168.1.1 | 3,232,235,777 | C0A80101 |
| 255.255.255.255 | 4,294,967,295 | FFFFFFFF |
為何嚴格的輸入規則對十進位轉換至關重要
十進位形式的可信度,完全取決於產生它時所使用的輸入。轉換器只會解析剛好四個未經填補的十進位位元組,並拒絕任何含糊不清的內容。像 010.0.0.1 這類前置零會被拒絕,因為傳統軟體曾將其解讀為八進位,一旦該前綴被視為進位標記,原本值為 10 的數字就會在無聲無息中變成值為 8。為了同樣的理由,前後空白字元、正負號、CIDR 後綴、缺漏的位元組,以及十六進位表示法都會遭到拒絕:對於一個意義取決於解析器的字串來說,無法產生精確的整數。
每個解析出來的位元組都必須落在 0 到 255 的含區間範圍內。十進位形式只能包含數字,除了字面意義的 0 之外不能有前置零,且必須落在完整的無符號 32 位元範圍內。正是這些限制,保證了工具所回傳的整數能毫無歧義地對應到單一位址,也保證了據此建構出的十六進位呈現具有相同的單一位址詮釋。嚴格的輸入,正是讓「IPv4 → 十進位 → 十六進位 → IPv4」這個往返轉換結果等於原始值的關鍵。
將位址以數字形式儲存與排序
數值形式的儲存對於跨位址欄位進行排序、範圍掃描及算術運算非常有用。以數值方式排序的十進位欄位會產生網路順序(0.0.0.0、0.0.0.1、…、255.255.255.255),而儲存點分十進位字串的文字欄位,則無法依網路順序排序,因為字典式比較會在每個句點處中斷。一旦正規化為固定寬度的 8 字元字串,十六進位儲存也具備同樣的特性;在日誌管線或低階工具中,由於 8 位數字形式可直接對應 32 位元欄位寬度,因此有時會優先採用。
在不同的表示法之間轉換時,會出現兩個常見的陷阱。第一,在僅提供有符號 32 位元整數的環境中,大於 2,147,483,647 的數值會被顯示為負數;而同一個數字若以十六進位呈現,雖然仍會顯示 8 位數字,但最高位元會被設定。請選用無符號 32 位元型別、寬度更大的整數,或能保留數字的字串欄位。第二,十六進位的大小寫可以混搭,也可以加上或不加 0x 前綴。請選定一種慣例並始終一致地套用,這樣日誌搜尋、正則表達式及複製貼上作業才不會在無聲無息中漏掉相符的結果。
十六進位的實用之處,以及工具的功能邊界
十六進位位址會出現在二進位通訊協定欄位、tcpdump 風格的封包擷取、某些防火牆匯出檔,以及讀取或寫入原始 32 位元值的程式碼中。手工轉換單一位址沒問題;若要轉換上千個位址,則需要自動化工具,而 IP 轉十進位轉換器可產生精確的中間整數,再透過一行十六進位格式化步驟即可完成呈現。此工具僅處理個別的 IPv4 位址。CIDR 前綴、子網路遮罩、通訊埠編號、主機名稱、IPv6,以及任意大小的整數皆超出處理範圍;像 /24 這類後綴會遭到拒絕,而非被悄悄忽略;當你需要網路與廣播邊界,或計算主機數量時,請改用 子網路計算機。
轉換過程中不會發出任何網路請求。運算完全在瀏覽器中執行,該數值不會被工具記錄或儲存,而你所複製的結果就是唯一產出的成品。如果涉及位址分類(私有與公網、已分配與保留、可路由與不可路由),請另行參考最新的位址註冊機構與網路政策,因為十進位與十六進位形式除了該 32 位元數值本身之外,並不帶有任何額外的意義。
如果你正在權衡各種選項,在 Xbox 上將 IPv4 變更為 IPv6:對應位址指南對此有詳細說明。
如果你正在權衡各種選項,如何找出位址的 IPv6 前綴對此有詳細說明。