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 應用程序只能提供一個虛擬地址,也可以通過如下方法獲取物理