91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C語言中怎么判斷兩個IPv4地址是否屬于同一個子網

發布時間:2021-07-02 17:17:51 來源:億速云 閱讀:631 作者:Leah 欄目:編程語言

這期內容當中小編將會給大家帶來有關C語言中怎么判斷兩個IPv4地址是否屬于同一個子網,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

問題描述:

現給定兩個IPv4地址,和一個子網掩碼,判斷是否屬于同一個子網,若屬于,輸出1,否則輸出0。

例如輸入:

172.16.1.3

172.16.1.35

255.255.255.224

輸出:

0

解決方案:

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

以下函數的作用是將字符串格式的IP轉化為4字節的IP(因為是4字節,所以使用int,但不同平臺的int所占的字節好像不同哈~不太確定)

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字符串轉化為4字節的整形
 */
int ip_to_int(char * ip)
{
 int start = 0, i = 0, ret = 0;
 int shift_factor = 3; // 一開始要向右移動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()函數的作用是將一段字符串轉化為數字,實際上就是將點分隔的字符串轉化為數字,ip_to_int()函數將字符串格式的ip轉化為整形。

以下是ip地址與子網掩碼運算的部分:

#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;
}

下面是其它網友的補充

題目描述

子網掩碼是用來判斷任意兩臺計算機的IP地址是否屬于同一子網絡的根據。
子網掩碼與IP地址結構相同,是32位二進制數,其中網絡號部分全為“1”和主機號部分全為“0”。利用子網掩碼可以判斷兩臺主機是否中同一子網中。若兩臺主機的IP地址分別與它們的子網掩碼相“與”后的結果相同,則說明這兩臺主機在同一子網中。
示例:
I P 地址  192.168.0.1
子網掩碼  255.255.255.0
轉化為二進制進行運算:
I P 地址 11010000.10101000.00000000.00000001
子網掩碼 11111111.11111111.11111111.00000000
AND運算
    11000000.10101000.00000000.00000000
轉化為十進制后為:
    192.168.0.0

I P 地址  192.168.0.254
子網掩碼  255.255.255.0

轉化為二進制進行運算:
I P 地址 11010000.10101000.00000000.11111110
子網掩碼 11111111.11111111.11111111.00000000
AND運算
     11000000.10101000.00000000.00000000
轉化為十進制后為:
     192.168.0.0
通過以上對兩臺計算機IP地址與子網掩碼的AND運算后,我們可以看到它運算結果是一樣的。均為192.168.0.0,所以這二臺計算機可視為是同一子網絡。
/*
* 功能: 判斷兩臺計算機IP地址是同一子網絡。
* 輸入參數: String Mask: 子網掩碼,格式:“255.255.255.0”;
* String ip1: 計算機1的IP地址,格式:“192.168.0.254”;
* String ip2: 計算機2的IP地址,格式:“192.168.0.1”;
*
* 返回值: 0:IP1與IP2屬于同一子網絡; 1:IP地址或子網掩碼格式非法; 2:IP1與IP2不屬于同一子網絡
*/
public int checkNetSegment(String mask, String ip1, String ip2)
{
/*在這里實現功能*/
return 0;
}
輸入描述:

輸入子網掩碼、兩個ip地址
輸出描述:

得到計算結果
輸入例子:

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語言——如何判斷兩個IP在同一網段

ip_addr.h

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

在程序中,那個“\”表示它之前的程序和后面的是連接的,下一行和上一行是一個語句, 反斜杠符號起到長代碼分行書寫功能。

注意:C語言中的關鍵字不可以用“\”分行!

上述就是小編為大家分享的C語言中怎么判斷兩個IPv4地址是否屬于同一個子網了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

鹿泉市| 黄浦区| 响水县| 武胜县| 内乡县| 申扎县| 建德市| 环江| 桂平市| 珠海市| 太保市| 黄大仙区| 景宁| 荆门市| 平远县| 奉化市| 宁武县| 海宁市| 成武县| 河池市| 常州市| 邛崃市| 庆元县| 滕州市| 保定市| 鄱阳县| 吉水县| 汾阳市| 伊吾县| 石家庄市| 拉孜县| 汤原县| 陕西省| 延庆县| 高尔夫| 屏东市| 昭通市| 隆化县| 平顶山市| 肇东市| 无极县|