国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
ip地址與整數(shù)之間的轉(zhuǎn)換
http://blog.sina.com.cn/s/blog_7124c26901014ncv.html
2013

   方法1:
  • IP地址轉(zhuǎn)換為整數(shù):IP地址每段可以堪稱是8位無(wú)符號(hào)整數(shù)即0~255,把每段拆分成一個(gè)二進(jìn)制形式,組合起來(lái),然后把這個(gè)二進(jìn)制數(shù)變啊層一個(gè)無(wú)符號(hào)32位整數(shù)。
  • 整數(shù)轉(zhuǎn)換為IP地址:把這個(gè)整數(shù)轉(zhuǎn)換成一個(gè)無(wú)符號(hào)32位二進(jìn)制數(shù)。從左到右,每八位進(jìn)行一下分割,得到4段8位的二進(jìn)制數(shù),把這些二進(jìn)制數(shù)轉(zhuǎn)換成整數(shù)然后加上“.”就可以了。
IP地址轉(zhuǎn)換成二進(jìn)制的代碼:
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<cassert>
using namespace std;

int *dec2bin(int decnum)
{
    int i,a,*b={0};
    a=decnum;
   for(i=7;i>=0;i--)
    {
       b[i]=a%2;
       a=a/2;
    }
    return b;  
}

int ipToInt(char *ipString)
{
   assert(ipString!=NULL);
    inti=0,j,n,l,count=0,return_num=0;
    char *tmp;
    int*tmp_num,*num,*d2b;
    char*s=ipString,*s_tmp;
    
    if(*s=='.')
         count++;
    count++;
    if(count!=4)
        return 0;
    
    while(*s!='\0')
    {
       if(*s!='.')
       {
           n=s-s_tmp;
           tmp=(char*)malloc(n*sizeof(char));
           memcpy(tmp,s,n);
           tmp_num[i]=atoi(tmp);
           d2b=dec2bin(tmp_num[i]);
           for(j=0;j<8;j++)
              num[8*i+j]=d2b[j];
           s++;
           i++;
           s_tmp=s;
       }
       s++;
    }
    if(*s='\0')
    {
       n=s-s_tmp;
       tmp=(char*)malloc(n*sizeof(char));
       memcpy(tmp,s,n);
       tmp_num[i]=atoi(tmp);
       d2b=dec2bin(tmp_num[i]);
       for(j=0;j<8;j++)
       num[8*i+j]=d2b[j];
    }
   for(j=0;j<32;j++)
      return_num=return_num*2+num[j];
    
    return return_num;
}



int main(void)
{
    char *string;
   string="192.168.12.56";
   cout<<string;
    int num,i;
   num=ipToInt(string);
    printf("The resultis:");
   //for(i=0;i<32;i++)
      // printf("%d",num[i]);
   cout<<num;
    system("pause");
    return 0;
    
}


方法2:C++中IP地址的轉(zhuǎn)換及判斷(轉(zhuǎn)自:http://blog.chinaunix.net/uid-439869-id-2403088.html)
1)IP地址,是由網(wǎng)絡(luò)地址的部分加上主機(jī)地址的部分組成的。例如:
   172.24.12.61(A/28)
 這個(gè)描述方式表示了這個(gè)IP地址所屬的網(wǎng)絡(luò)是一個(gè)28位掩碼的網(wǎng)絡(luò)。所謂網(wǎng)絡(luò)掩碼,是一個(gè)連1+連0組成的IP地址類型的地址,一個(gè)掩碼的末尾有多少位連續(xù)的0(e.g.x個(gè)),就表示這個(gè)子網(wǎng)可以有2^x個(gè)主機(jī)地址。IP地址最長(zhǎng)也只有32位,所以A/28就表示前面28位都是1,那么最后就有4個(gè)0,所以這個(gè)網(wǎng)絡(luò)的掩碼就是255.255.255.240.
   那么上面那個(gè)IP地址的子網(wǎng)地址是怎么得出來(lái)的呢?就是用IP地址和子網(wǎng)掩碼做一下“與”運(yùn)算,即:
   172.24.12.61&255.255.255.240=172.24.12.48
   可見(jiàn),這個(gè)子網(wǎng)的網(wǎng)絡(luò)地址就是172.24.12.48,那么172.24.12.61的主機(jī)地址就是13.
   補(bǔ)充一下,所謂“與”運(yùn)算,其實(shí)是把十進(jìn)制的數(shù)字換算成二進(jìn)制以后的“與”。
   一個(gè)子網(wǎng)里,子網(wǎng)網(wǎng)絡(luò)地址通常是不分配給主機(jī)用的,而且,子網(wǎng)的廣播地址也是不分配的。子網(wǎng)的廣播地址指的就是子網(wǎng)網(wǎng)絡(luò)地址的后面那幾個(gè)0的作為主機(jī)地址的值都是1的IP地址。那么在這個(gè)例子里,子網(wǎng)廣播地址就是:172.24.12.63。
   要判斷兩個(gè)IP地址是否屬于同一子網(wǎng),可以把兩個(gè)IP地址分別與他們的子網(wǎng)掩碼“與”一下,如果得到同一個(gè)子網(wǎng)地址,那就屬于同一子網(wǎng)的了。
2)在C++中,要把一個(gè)IP地址的字符串轉(zhuǎn)換成一個(gè)可以直接用來(lái)做“與”運(yùn)算的數(shù)字,可以用這個(gè)函數(shù)。
inet_addr()將網(wǎng)絡(luò)地址轉(zhuǎn)換成二進(jìn)制的數(shù)字
相關(guān)函數(shù) inet_aton, inet_ntoa
表頭文件
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
定義函數(shù) unsigned long int inet_addr(const char *cp);
函數(shù)說(shuō)明inet_addr()用來(lái)將參數(shù)cp所指的網(wǎng)絡(luò)地址字符串轉(zhuǎn)換成網(wǎng)絡(luò)所使用的二進(jìn)制數(shù)字。網(wǎng)絡(luò)地址字符串是以數(shù)字和點(diǎn)組成的字符串。
返回值:成功則返回對(duì)應(yīng)的網(wǎng)絡(luò)二進(jìn)制的數(shù)字。失敗返回-1.
3)C++中,反過(guò)來(lái),如果要把一個(gè)這種運(yùn)算完成的二進(jìn)制數(shù)字直接生成一個(gè)IP地址的字符串的話,可以用下面這個(gè)函數(shù)。
inet_ntoa()將網(wǎng)絡(luò)二進(jìn)制的數(shù)字轉(zhuǎn)換成網(wǎng)絡(luò)地址
相關(guān)函數(shù) inet_addr,inet_aton
表頭文件
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
定義函數(shù) char * inet_ntoa(struct in_addr_in);
函數(shù)說(shuō)明inet_ntoa()用來(lái)將參數(shù)in所指的網(wǎng)絡(luò)二進(jìn)制數(shù)字轉(zhuǎn)換成網(wǎng)絡(luò)地址,然后將指向此網(wǎng)絡(luò)地址字符串的指針?lè)祷亍?/div>
返回值:成功則返回字符串指針,失敗則返回NULL。
結(jié)構(gòu)in_addr定義如下
struct in_addr
{
unsigned long int s_addr;
}
4)代碼例子:
   unsigned long intip=inet_addr(ipString.c_str());
   in_addr subnetIp;
   subnetIp.s_addr=ip&Mask;
  subnetIpAddr=inet_ntoa(subnetIp);
5)說(shuō)明:
   需要注意的是,在使用以上兩個(gè)函數(shù)的時(shí)候,要在引用的頭文件里加上上面所提到的三個(gè)頭文件:
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
   此外,在編譯的時(shí)候,還需要在makefile里加上兩個(gè)鏈接庫(kù)問(wèn)價(jià)(nsl和socket)。否則的話會(huì)出現(xiàn)ld的錯(cuò)誤。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服