最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語(yǔ)言中判斷兩個(gè)IPv4地址是否屬于同一個(gè)子網(wǎng)的代碼

 更新時(shí)間:2017年09月26日 23:16:39   作者:aix  
這篇文章主要介紹了C語(yǔ)言中判斷兩個(gè)IPv4地址是否屬于同一個(gè)子網(wǎng)的代碼,需要的朋友可以參考下

問(wèn)題描述:

現(xiàn)給定兩個(gè)IPv4地址,和一個(gè)子網(wǎng)掩碼,判斷是否屬于同一個(gè)子網(wǎng),若屬于,輸出1,否則輸出0。

例如輸入:

172.16.1.3

172.16.1.35

255.255.255.224

輸出:

0

解決方案:

首先將字符串格式的IP地址轉(zhuǎn)化為4字節(jié)的IP地址,然后使用與(&)運(yùn)算,分別將兩個(gè)IP地址與掩碼相與,若最后的值相同,則為同一個(gè)子網(wǎng),否則不是。

以下函數(shù)的作用是將字符串格式的IP轉(zhuǎn)化為4字節(jié)的IP(因?yàn)槭?字節(jié),所以使用int,但不同平臺(tái)的int所占的字節(jié)好像不同哈~不太確定)

int _to_int(char * str, int start_idx, int end_idx)
{
 int a = 0, i;
 for (i = start_idx; i <= end_idx; ++i)
 {
 a = a * 10 + (str[i] - '0');
 }

 return a;
}

/*
 * 將ip字符串轉(zhuǎn)化為4字節(jié)的整形
 */
int ip_to_int(char * ip)
{
 int start = 0, i = 0, ret = 0;
 int shift_factor = 3; // 一開(kāi)始要向右移動(dòng)3 * 8位
 char c;
 while (c = ip[i])
 {
 if (c == '.')
 {
  int a = _to_int(ip, start, i - 1);
  int temp = shift_factor * 8;
  ret = ret | (a << temp);

  shift_factor--;
  start = i + 1;
 }
 i++;
 }

 return ret;
}

_to_int()函數(shù)的作用是將一段字符串轉(zhuǎn)化為數(shù)字,實(shí)際上就是將點(diǎn)分隔的字符串轉(zhuǎn)化為數(shù)字,ip_to_int()函數(shù)將字符串格式的ip轉(zhuǎn)化為整形。

以下是ip地址與子網(wǎng)掩碼運(yùn)算的部分:

#include <stdio.h>

int main()
{
 char a1[15], a2[15], a3[15];

 gets(a1);
 gets(a2);
 gets(a3);

 int ip1 = ip_to_int(a1);
 int ip2 = ip_to_int(a2);
 int ip3 = ip_to_int(a3);

 int result = 0;
 if ((ip1 & ip3) == (ip2 & ip3))
 {
 result = 1;
 }

 printf("%d", result);

 return 0;
}

下面是其它網(wǎng)友的補(bǔ)充

題目描述

子網(wǎng)掩碼是用來(lái)判斷任意兩臺(tái)計(jì)算機(jī)的IP地址是否屬于同一子網(wǎng)絡(luò)的根據(jù)。
子網(wǎng)掩碼與IP地址結(jié)構(gòu)相同,是32位二進(jìn)制數(shù),其中網(wǎng)絡(luò)號(hào)部分全為“1”和主機(jī)號(hào)部分全為“0”。利用子網(wǎng)掩碼可以判斷兩臺(tái)主機(jī)是否中同一子網(wǎng)中。若兩臺(tái)主機(jī)的IP地址分別與它們的子網(wǎng)掩碼相“與”后的結(jié)果相同,則說(shuō)明這兩臺(tái)主機(jī)在同一子網(wǎng)中。
示例:
I P 地址  192.168.0.1
子網(wǎng)掩碼  255.255.255.0
轉(zhuǎn)化為二進(jìn)制進(jìn)行運(yùn)算:
I P 地址 11010000.10101000.00000000.00000001
子網(wǎng)掩碼 11111111.11111111.11111111.00000000
AND運(yùn)算
    11000000.10101000.00000000.00000000
轉(zhuǎn)化為十進(jìn)制后為:
    192.168.0.0

I P 地址  192.168.0.254
子網(wǎng)掩碼  255.255.255.0

轉(zhuǎn)化為二進(jìn)制進(jìn)行運(yùn)算:
I P 地址 11010000.10101000.00000000.11111110
子網(wǎng)掩碼 11111111.11111111.11111111.00000000
AND運(yùn)算
     11000000.10101000.00000000.00000000
轉(zhuǎn)化為十進(jìn)制后為:
     192.168.0.0
通過(guò)以上對(duì)兩臺(tái)計(jì)算機(jī)IP地址與子網(wǎng)掩碼的AND運(yùn)算后,我們可以看到它運(yùn)算結(jié)果是一樣的。均為192.168.0.0,所以這二臺(tái)計(jì)算機(jī)可視為是同一子網(wǎng)絡(luò)。
/*
* 功能: 判斷兩臺(tái)計(jì)算機(jī)IP地址是同一子網(wǎng)絡(luò)。
* 輸入?yún)?shù): String Mask: 子網(wǎng)掩碼,格式:“255.255.255.0”;
* String ip1: 計(jì)算機(jī)1的IP地址,格式:“192.168.0.254”;
* String ip2: 計(jì)算機(jī)2的IP地址,格式:“192.168.0.1”;
*
* 返回值: 0:IP1與IP2屬于同一子網(wǎng)絡(luò); 1:IP地址或子網(wǎng)掩碼格式非法; 2:IP1與IP2不屬于同一子網(wǎng)絡(luò)
*/
public int checkNetSegment(String mask, String ip1, String ip2)
{
/*在這里實(shí)現(xiàn)功能*/
return 0;
}
輸入描述:

輸入子網(wǎng)掩碼、兩個(gè)ip地址
輸出描述:

得到計(jì)算結(jié)果
輸入例子:

255.255.255.0
192.168.224.256
192.168.10.4

輸出例子:

1
解答代碼:

#include<iostream>
#include<fstream>
#include<string>
#include<cstring>
#include<cctype>
#include<algorithm>
#include<cstdlib>
using namespace std;

typedef struct ip
{
 int first;
 int second;
 int three;
} IP;

int judgeIp(string ipSubNet,IP &ip)
{
 int index=0;
 ip.first=atoi(&ipSubNet[index]);
 if(ip.first>255)
 return 0;

 index++;
 index=ipSubNet.find_first_of('.',index);
 ip.second=atoi(&ipSubNet[++index]);
 if(ip.second>255)
 return 0;

 index++;
 index=ipSubNet.find_first_of('.',index);
 ip.three=atoi(&ipSubNet[++index]);
 if(ip.three>255)
 return 0;

 index++;
 index=ipSubNet.find_first_of('.',index);
 ip.fouth=atoi(&ipSubNet[++index]);
 if(ip.fouth>255)
 return 0;

 return 1;
}

int main()
{
 string ipSubNet,ipAdd1,ipAdd2;
 IP subNet,ip1,ip2;
 while(cin>>ipSubNet>>ipAdd1>>ipAdd2)
 {
 if(judgeIp(ipSubNet,subNet)&&judgeIp(ipAdd1,ip1)&&judgeIp(ipAdd2,ip2))
 {
  ip1.first=ip1.first & subNet.first;
  ip1.second=ip1.first & subNet.second;
  ip1.second=ip1.first & subNet.second;
  ip1.fouth=ip1.first & subNet.fouth;

  ip2.first=ip2.first & subNet.first;
  ip2.second=ip2.first & subNet.second;
  ip2.second=ip2.first & subNet.second;
  ip2.fouth=ip2.first & subNet.fouth;

  if(ip1.first==ip2.first&&ip1.second==ip2.second&&ip1.three==ip2.three&&ip1.fouth==ip2.fouth)
  cout<<'0'<<endl;
  else
  cout<<'2'<<endl;
 }
 else
  cout<<'1'<<endl;
 }
 return 0;
}

C語(yǔ)言——如何判斷兩個(gè)IP在同一網(wǎng)段

ip_addr.h

#define ip_addr_netcmp(addr1, addr2, mask) (((addr1)->addr & \
                       (mask)->addr) == \
                       ((addr2)->addr & \
                       (mask)->addr))

在程序中,那個(gè)“\”表示它之前的程序和后面的是連接的,下一行和上一行是一個(gè)語(yǔ)句, 反斜杠符號(hào)起到長(zhǎng)代碼分行書(shū)寫(xiě)功能。

注意:C語(yǔ)言中的關(guān)鍵字不可以用“\”分行!

到這里,這篇關(guān)于C語(yǔ)言中判斷ip是否在同一子網(wǎng)的文章就結(jié)束到這。

相關(guān)文章

  • C++ stack與queue使用方法詳細(xì)講解

    C++ stack與queue使用方法詳細(xì)講解

    stack是一種容器適配器,專(zhuān)門(mén)用在具有后進(jìn)先出操作的上下文環(huán)境中,其刪除只能從容器的一端進(jìn)行 元素的插入與提取操作;隊(duì)列是一種容器適配器,專(zhuān)門(mén)用于在FIFO上下文(先進(jìn)先出)中操作,其中從容器一端插入元素,另一端提取元素
    2023-01-01
  • QT中QStringListModel類(lèi)的應(yīng)用介紹

    QT中QStringListModel類(lèi)的應(yīng)用介紹

    QStringListModel是最簡(jiǎn)單的模型類(lèi),具備向視圖提供字符串?dāng)?shù)據(jù)的能力,本文主要介紹了QT中QStringListModel類(lèi)的應(yīng)用介紹,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • C++實(shí)現(xiàn)雷霆戰(zhàn)機(jī)可視化小游戲

    C++實(shí)現(xiàn)雷霆戰(zhàn)機(jī)可視化小游戲

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)雷霆戰(zhàn)機(jī)可視化小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • C++多線(xiàn)程實(shí)現(xiàn)綁定CPU的方法詳解

    C++多線(xiàn)程實(shí)現(xiàn)綁定CPU的方法詳解

    這篇文章主要為大家詳細(xì)介紹了C++如何利用多線(xiàn)程實(shí)現(xiàn)綁定CPU,文中的示例代碼簡(jiǎn)潔易懂,具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-05-05
  • C語(yǔ)言 詳細(xì)講解邏輯運(yùn)算符的使用

    C語(yǔ)言 詳細(xì)講解邏輯運(yùn)算符的使用

    在C語(yǔ)言中,邏輯運(yùn)算符有&&、||、!;&&表示“與”的意思,需要兩端的表達(dá)式的值都為true,該式的值才為true。||表示“或”的意思,兩端的表達(dá)式的值只要有一端為true,該式的值就為true。!表示“非”的意思,將該式的真值換成相反的真值,即false和true互換
    2022-04-04
  • Matlab實(shí)現(xiàn)別踩白塊小游戲的示例代碼

    Matlab實(shí)現(xiàn)別踩白塊小游戲的示例代碼

    別踩白塊是一款音樂(lè)類(lèi)休閑游戲,游戲的玩法不難,只需跟著音樂(lè)的節(jié)奏點(diǎn)中對(duì)的方塊即可。本文將用Matlab實(shí)現(xiàn)這一經(jīng)典游戲,感興趣的可以了解一下
    2022-03-03
  • C++11中互斥鎖的使用

    C++11中互斥鎖的使用

    本文主要介紹了C++11中互斥鎖的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • 解決C++ fopen按行讀取文件及所讀取的數(shù)據(jù)問(wèn)題

    解決C++ fopen按行讀取文件及所讀取的數(shù)據(jù)問(wèn)題

    今天小編就為大家分享一篇解決C++ fopen按行讀取文件及所讀取的數(shù)據(jù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • C++實(shí)現(xiàn)保存數(shù)據(jù)至EXCEL

    C++實(shí)現(xiàn)保存數(shù)據(jù)至EXCEL

    這篇文章主要介紹了C++實(shí)現(xiàn)保存數(shù)據(jù)至EXCEL,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • C語(yǔ)言循環(huán)語(yǔ)句之重復(fù)執(zhí)行特定的代碼塊

    C語(yǔ)言循環(huán)語(yǔ)句之重復(fù)執(zhí)行特定的代碼塊

    在C語(yǔ)言中分支和循環(huán)語(yǔ)句是實(shí)現(xiàn)條件執(zhí)行和重復(fù)執(zhí)行的重要工具,下面這篇文章主要給大家介紹了關(guān)于C語(yǔ)言循環(huán)語(yǔ)句之重復(fù)執(zhí)行特定的代碼塊的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-01-01

最新評(píng)論

乌拉特前旗| 巴南区| 仁布县| 衡南县| 三亚市| 天全县| 新田县| 沈丘县| 文成县| 平南县| 阳春市| 长乐市| 朝阳区| 基隆市| 蓬莱市| 土默特右旗| 溆浦县| 洪洞县| 普定县| 成安县| 兴山县| 淳安县| 新兴县| 永安市| 上林县| 遂川县| 辉县市| 双辽市| 安阳县| 沛县| 广昌县| 江门市| 呼图壁县| 德格县| 泸州市| 景东| 丰都县| 高碑店市| 湘潭县| 星子县| 沈丘县|