1. 程式人生 > >IP從整型地址轉換為點分形式

IP從整型地址轉換為點分形式

題目描述:

通常我們在儲存IPv4地址的時候不會直接使用字串,例如192.168.1.1,我們不用“192.168.1.1”這個字串來儲存,而是將這個IP地址轉換為一個無符號整數,因為一個IPv4的地址總體上剛好是32位二進位制數,只是用了“.”符號每八位進行了一個分割,所以我們只要使用一個32位的無符號整型來儲存即可,這樣只要4位元組,如果使用字串則需要更多的位元組,我們需要做的就是每次在使用IP地址的時候從無符號整形到IP地址進行一步轉換工作就可以了。

例如:192.168.1.1 轉換為 整數為: 3232235777

接下來我們需要做的就是給定一個無符號整數,然後將其轉換為IP的形式。

解決方案:

給定的一個無符號整數15,其實我們可以表示為一個32位的二進位制數:00000000|00000000|00000000|00001111,我們只要將這個32位二進位制數每八位轉換為一個十進位制數即可,15轉換為IPv4的形式就是 0.0.0.15。那如何求這個32位二進位制數呢? 其實就是進位制轉換的題目了,將十進位制整數轉換為二進位制數,不斷的模2取餘然後從底部向上組合即可,見下圖:
這裡寫圖片描述

這裡面有個要注意的地方,就是32位二進位制數高位即使為0也需要記錄下來,像15轉換為IP地址為0.0.0.15,前三位都是0。

實現程式碼:

#include <cstdio>
#include <cmath>
#include <vector>
#define IP 4 //IP version 4 #define BASE 2.0 // binary #define BIT 8 using namespace std; int main() { unsigned int num; scanf("%d", &num); int ipv = IP; vector<int> ipvec; while(ipv--) { int bits = BIT; int digit = 0; while(bits--) { int b = num % 2; num /= 2
; if(b != 0) { digit += pow(BASE, (BIT - bits - 1)); } printf("%d\n", digit); } ipvec.push_back(digit); } for (int i = ipvec.size() - 1; i >=0; i--) { printf("%d", ipvec[i]); if(i != 0) { printf("."); } } return 0; }

相關推薦

IP地址轉換形式

題目描述: 通常我們在儲存IPv4地址的時候不會直接使用字串,例如192.168.1.1,我們不用“192.168.1.1”這個字串來儲存,而是將這個IP地址轉換為一個無符號整數,因為一個IPv4的地址總體上剛好是32位二進位制數,只是用了“.”符號每八

32位IP地址轉換10進位制的IP地址

實現程式碼: #include<iostream> #include<cstring> using namespace std; bool check(char *str); //檢查串中是否有0/1之外的字元 int trans(char *s

【陣列】將一串轉換人民幣讀法

 最近在啃《瘋狂Java講義》,看到第四章有一道題RT,“折磨”了我這隻菜鳥兩天時間,到現在終於有點樣子了,先記錄下來,由於此時沒有看書後面的章節,很多知識點還不甚清楚(誰讓我在學校上Java的時候水了一波呢,0.0),所以等以後知識點了解得更多的時候再回來重新理一理邏輯,各位看官若覺得有

STM32學習筆記3——怎樣將變數轉換字元變數 然後串列埠 或者LCD傳送出來(STM32) 以及sprintf的用法

u8 b;         unsigned char c[3]; b=123; c[0]= (unsigned char)((b/100)); c[1]= (unsigned char)((b/10)); c[2]= (unsigned char)(b); for( i=0;i<3;i++) { U

C++中怎樣將轉換字串

最簡單的方法是使用一個字串流(stringstream):#include<iostream>#include<string>#include<sstream>using namespace std;string itos(int i)

VS2010長變數轉換LPCTSTR

CString strText; strText.Format(TEXT("%d"),menuSet.m_DishID); m_ctlListMenu.InsertItem(i,strText); menuSet.m_DishID是一個長整型變數,InsertItem函式的

在kernel裡怎樣把IP地址二進位制轉換十進位制

#define NIPQUAD(addr) \         ((unsigned char *)&addr)[0], \         ((unsigned char *)&addr)[1], \         ((unsigned char *)&addr)[2], \  

Java復習之自動轉換成浮

自動 string 自動轉換 oat 整型 fop ring java 轉換 class DataCon {   public static void main(String args[])   {     int nop1=2;     float fop2=2.25f;

ARP:將32位的IP地址轉換48位的實體地址

ARP:將32位的IP地址轉換為48位的實體地址。 IP地址是網路層的地址,連上網際網路的每一臺主機的每一個介面都會有一個IP地址,每臺主機的每個網絡卡均有唯一的實體地址,實體地址在生產時就已經定死,無法改變,而每個網絡卡的IP地址是可以改變的(例如連上不同的

將web伺服器日誌檔案中的IP地址轉換主機名

需求:將log檔案中的ip地址轉換為主機名 日誌檔案的格式如下: 10.100.122.132 - [17/Jun/2013:22:53:58] "GET /bgs/greenbg.gif HTTP 1.1" 200 50 10.100.122.133 - [17/Jun

oracle ip地址轉換整數 整數轉換ip程式碼

2:ip地址轉換為整數: 在oracle中建立如下函式即可: create or replace function striptoint( dottedQuad IN VARCHAR2) return number is   Result NUMBER; begin   Result:= (s

IP地址轉換16進位制輸出

輸入 : 1.168.229.200 輸出 :0x01 0xa8 0xe5 0xc8 #include <arpa/inet.h> #include <netinet/in.h> #include <iomanip> #i

esp8266 inet_ntoa函式實現 ip地址轉換字串 MAC地址轉字串

esp8266晶片可作為mcu,功能很強大,但與傳統mcu相比,可用資源實在不多,連浮點數都不支援 IP地址轉字元創函式inet_ntoa很方便,但8266中沒有!!!!! 本節將講述如何自己實現inet_ntoa函式 ip轉字串 ******************

spring中頁面傳遞參數Date類自動轉換字符串的方法

ring sim new spring 自動轉換 方法 -m web tom @InitBinder public void initBinder(WebDataBinder binder){ SimpleDateFormat sdf =new SimpleDateFor

error C2664: “int CWnd::MessageBoxW(LPCTSTR,LPCTSTR,UINT)”: 無法將參數 1 “const char [9]”轉換“LPCTSTR”

報錯 連接失敗 更新 vs2015 轉換 nbsp b-s ons code error C2664: “int CWnd::MessageBoxW(LPCTSTR,LPCTSTR,UINT)”: 無法將參數 1 從“const char [9]”轉換為“LPCTSTR”

Python 之 %s字符串、%d、%f浮

3.1 位數 string 超過 根據 %d 兩種 精確 字符 %s 1 string="hello" 2 3 #%s打印時結果是hello 4 print "string=%s" % string

UWP中String類如何轉換Windows.UI.Color

否則 .get 完美解決 ack black pro get 求助 inf 原文:UWP中String類型如何轉換為Windows.UI.Color我在學習過程中遇到的,我保存主題色為string,但在我想讓StatusBar隨著主題色變化時發現沒法使用。 1 The

DataContractJsonSerializer序列化時間類轉換UTC溢出問題

設置 arr AD toa C# exception default AR AC 問題描述 如下一個實體類,含有非空時間類型屬性,默認是C#的最小時間,在使用DataContractJsonSerializer將該類對象序列化成JSON時,拋出異常信息:System.Run

C# 不用系統自帶的方法將字符串類123456轉換值類

pan array mstr [] ron string char highlight 方法 C# 不用系統自帶的方法將字符串類型123456轉換為值類型 static void Main(string[] args) {

虛擬地址轉換物理地址【轉】

linux 目錄項 https 兼容 應用程序 數據結構 lan current get 轉自:https://blog.csdn.net/shuningzhang/article/details/38090621 應用程序只能提供一個虛擬地址,也可以通過如下方法獲取物理