一個 8 字元的十六進位 IPv4 位址與點分十進位表示法將 32 位元拆成四個十進位八位元組所得到的位元相同,只是改用 16 進位而非四個 256 進位元件來表示。例如,十六進位字串 C0A80101 與 192.168.1.1 代表相同的數值,因為十六進位的 C0 等於十進位的 192,十六進位的 A8 等於十進位的 168,而每一個十六進位的 01 都等於十進位的 1。因此,在兩種形式之間轉換等同於以兩種不同的表示法讀取同一個 32 位元數值:一個單一的大端序十六進位字串,對照四個以句點分隔的十進位八位元組。最可靠的工作流程分為兩個步驟:先把十六進位字串轉成一個無符號十進位整數,再把該整數送入一個轉換器,由它產生四個點分的八位元組。IP to Decimal Converter 在安全整數範圍內精確完成第二個步驟,不會執行任何 DNS 查詢、地理位置請求、註冊機構查詢或外部網路呼叫。

十六進位 IPv4 位址的構成方式
IPv4 位址的定義是四個八位元組,每個範圍從 0 到 255,第一個八位元組佔最高有效位元組的八位元,第四個則佔最低有效位元組的八位元。這種配置記載於 RFC 791,其中說明了網際網路通訊協定以及至今仍在使用的 32 位元位址結構。點分十進位形式將這四個八位元組顯示為以句點分隔的十進位數字。十六進位形式則將同樣的四個八位元組顯示為兩位數的 16 進位數字,可以合併成一個 8 字元的字串,或以句點、底線、冒號等分隔符號隔開。
不論使用哪種分隔方式,讀取十六進位字串的過程都相同。前兩個十六進位數字是第一個八位元組,接下來兩個是第二個,再來兩個是第三個,最後兩個則是第四個。由於採用大端序位元組順序,你讀到的第一個八位元組就是最高有效位元組。這就是為什麼 C0A80101 以 C0 (192) 開頭而不是 01 (1),也因此不論你寫成 c0a80101、C0.A8.01.01 或 C0:A8:01:01,其代表的數值都不會改變。
| 表示方式 | 結構 | 可接受的字元 | 數值範圍 | 常見的使用場合 |
|---|---|---|---|---|
| 十六進位 IPv4 字串 | 八個十六進位數字,每個八位元組兩位,大端序 | 0 到 9 以及 A 到 F,大小寫均可 | 00000000 到 FFFFFFFF | Wireshark 欄位、註冊機構匯出、記錄檔、反向 DNS 區域 |
| 無符號十進位整數 | 單一數字,無分隔符號 | 0 到 9,不含前置零 | 0 到 4294967295 | 資料庫欄位、防火牆規則、測試固件 |
| 點分十進位 IPv4 | 四個以句點分隔的十進位八位元組 | 每個八位元組 0 到 9,不含前置零 | 0.0.0.0 到 255.255.255.255 | 瀏覽器網址列、設定檔、網路工具 |
十六進位與點分形式所包含的資訊完全相同,差別只在進位系統。十進位整數形式則介於兩者之間,是大多數軟體在需要以數值而非文字方式排序或比較位址時,實際儲存的形式。
從十六進位到點分十進位的兩階段路徑
少數主流工具會將十六進位解析器與點分十進位格式化器合併為單一步驟,因此最簡潔的工作流程是兩個簡短的階段。首先,將十六進位字串解析為一個 32 位元無符號整數。其次,將該整數切回四個 256 進位的八位元組。透過精確的整數運算將兩個步驟結合,可以確保不會因浮點數捨入而遺失任何資訊,並讓模稜兩可的輸入被拒絕而非被猜測。
對於小型範例,第一階段可以手動完成。以 C0A80101 為例:
- 辨識每個十六進位數字的位值:16⁷、16⁶、16⁵、16⁴、16³、16²、16¹、16⁰。
- 代入數字:(12×16⁷) + (0×16⁶) + (10×16⁵) + (8×16⁴) + (0×16³) + (1×16²) + (0×16¹) + (1×16⁰)。
- 計算結果:3,221,225,472 + 10,485,760 + 524,288 + 256 + 1 = 3,232,235,777。
這個數字 3,232,235,777 就是該位址的無符號 32 位元整數表示法。它也是點分形式 192.168.1.1 展開後所得到的十進位數值,因為 192×256³ + 168×256² + 1×256 + 1 會產生相同的總和。下一節所介紹的反向操作,則是透過重複的除法與餘數,將 3,232,235,777 分解以還原每個八位元組。
將十進位整數轉換為點分十進位
第二階段正是 IP to Decimal Converter 最擅長的部分。它接受範圍在 0 到 4,294,967,295 之間的單一無符號十進位整數,並產生對應的 IPv4 位址,不進行任何捨入、八位元組猜測或網路請求。整個轉換過程都在瀏覽器內進行,因此數值不會離開你的電腦。
- 在 IP to Decimal Converter 中選擇 decimal to IPv4 方向。
- 輸入第一階段得到的整數。以 C0A80101 而言,該數值為 3232235777,不含空格、千分位分隔符號、正負號或前置零。
- 執行轉換並比對顯示的結果,應為 192.168.1.1。
- 複製點分形式,並確認目的欄位或資料庫欄位能將其儲存為純粹的點分字串;如果你需要以數值方式排序,則改用無符號 32 位元型別,而非有符號 32 位元欄位。
對於手上已有點分形式並想反向操作的讀者,同一個工具也接受嚴格的 IPv4 位址並回傳其無符號十進位數值。那個反向工作流程記載於 How to Convert a Decimal IP Address to Hexadecimal,其中使用相同的精確運算方法,最終回到 16 進位。
為什麼嚴格的十進位輸入規則很重要
十六進位字串看似寬鬆,因為每兩個一組的數字都是有效的位元組,但從它們產生的十進位整數卻是嚴格的。IP to Decimal Converter 刻意強制執行這種嚴格性。十進位形式只能包含數字,除了字面數值 0 之外不能以前置零開頭,而且必須落在完整的無符號 32 位元範圍內。點分形式則必須恰好包含四個以句點分隔的十進位整數,不允許前後空白、正負號、缺少八位元組,以及任何八位元組中的前置零。
這些規則並非隨意制定。前置零在歷史上曾被不同軟體不一致地解讀,有時會被視為八進位。位址 010.0.0.1 依解析器不同,可能代表十進位的十、八進位的八、或十進位的八。嚴格的十進位表示法消除了這種模糊性,而該工具對應的八個外部檢查案例涵蓋了兩個端點、回環位址、文件區段、私人位址空間、多點傳送範圍值,以及最大位址,每個固件都有反向斷言。
如果你輸入的整數被拒絕,最常見的原因是從試算表貼上時帶有前置零、夾帶空白,或來自有符號 32 位元顯示的負號。移除這些字元後再試一次。如果你的資料已經是點分十六進位形式(例如 C0.A8.01.01),請在第一階段前先將八位元組串接成 8 字元的字串,以確保轉換過程不會產生歧義。
安全地儲存與讀取結果
將 IPv4 位址轉換為十進位整數只是算術運算,並非網路分類。這個數值無法告訴你該位址是否屬於私人網路、回環、多點傳送、文件用途、保留用途,或可在公共網際網路上路由。當分類很重要時,請另外套用目前的位址註冊機構與網路政策。
在不同程式語言與資料庫之間搬移結果時要特別小心。部分環境會使用 32 位元有符號整數,因此超過 2,147,483,647 的數值會顯示為負數。IPv4 的最大值 4,294,967,295 幾乎是有符號邊界的兩倍,這表示像 255.255.255.255 這類高位址或大型文件區段,在經過有符號欄位時會發生錯誤的循環。請依需求使用無符號 32 位元型別、較寬的整數型別,或經過驗證的十進位字串。Python 的 ipaddress.IPv4Address 文件在該語言自身的整數模型中也說明了相同的注意事項。
資料庫的排序同樣取決於欄位型別。十進位的文字會以字典順序排序,所以 "10" 會排在 "9" 前面,除非該欄位被正規化為固定寬度。點分位址若以純字串排序,也不會依照其數值網路順序排列,因為 "10.0.0.1" 在字母排序中會排在 "9.0.0.1" 之前。十進位整數才是能以單一整數欄位正確排序與比較的形式。當可稽核性很重要時,請保留原始輸入,並記錄所選擇的表示方式,以便未來的讀者能毫不臆測地還原對應關係。
何時該改用其他工具
IP to Decimal Converter 只處理單一筆 IPv4 位址,不處理其他內容。像 /24 這種後綴會被拒絕,而非被靜默忽略。如果你需要網路與廣播邊界、主機數量,或子網路遮罩,正確的工具應該是專門的子網路計算器,而不是位址轉換器。使用二進位而非十六進位時,雖然遵循相同的兩階段工作流程,但第一階段會改用 2 進位而非 16 進位,並已在其他地方針對需要這條精確路徑的讀者另行說明。
如果你的目標是將 IPv4 位址封裝在 IPv6 表面中,IP to Decimal Converter 並不會產生 IPv6 連線。當你明確需要符合 RFC 4291 的 IPv4 對應位址(不論是混合、壓縮或完全展開的形式)時,請使用 IPv4-to-IPv6 對應工具。在這裡計算出的整數只是一個中介數值;將它轉換並不會賦予 IPv6 可達性,也不會改變該位址在公共網際網路上的路由方式。
對於正式上線的遷移作業,請先以一批樣本與目的語言中維護良好的 IP 位址程式庫進行比對,再進行批次轉換,並以幾個關鍵的固件驗證資料庫型別的邊界。八個測試固件雖然無法取代遷移腳本,但能抓出最常見的邊界錯誤:在 2,147,483,648 處的有符號溢位、最大位址 4,294,967,295、最小位址 0,以及回環數值 2,130,706,433。
如需更深入的探討,請參閱 How to Get a MAC Address in CMD for Development。