1. 程式人生 > >點分十進位制表示的IP地址解析方法

點分十進位制表示的IP地址解析方法

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <string>
#include <iostream>
#include <cassert>
using namespace std;


const int maxHostLen = 10;
const int ipCount = 4;


//函式功能:給定元素個數,建立字串陣列
//引數:elementCount 陣列元素個數
//引數:element 每個陣列元素的長度
//返回值:返回一個包含elementeredCount個長度為elementLen的字串陣列
char** mallocChar(int elementCount, int elementLen)
{
char** hostInfo = new char*[elementCount];
for (int i = 0; i < elementCount; i++)
{
hostInfo[i] = new char[elementLen];
memset(hostInfo[i], 0, sizeof(char)* elementLen);
}
return hostInfo;
}
//功能:動態分配記憶體字串陣列釋放
//引數:freeChar要釋放的字串陣列
//引數:elementCount 字串陣列元素個數
void freeChar(char** freeChar, int elementCount)
{
for (int i = 0; i < elementCount; i++)
{
if (freeChar[i])
{
delete freeChar[i];
freeChar[i] = NULL;
}
}
if (freeChar)
{
delete[] freeChar;
freeChar = NULL;
}
}
//功能:從給定的ip地址中解析點分字串
//引數:ipAddr要解析的ip地址
//引數:hostInfo 儲存解析結果
//返回值:解析成功返回TRUE,失敗返回False
bool findCstyle(char* ipAddr, char**& hostInfo)
{

int itertmp = 0;
char* tmp1 = ipAddr;
char* tmp2 = ipAddr;


while (*tmp1)
{
tmp1++;
if (*tmp1 == '.'|| *tmp1 == '\0')
{
strncpy(hostInfo[itertmp], tmp2, tmp1 - tmp2);
tmp2 = tmp1 + 1;
itertmp++;
}
}
if (hostInfo)
{
return true;
}
return false;
}
//功能:單一字串陣列
//引數:hostInfo要列印的字串陣列
//引數:element字串陣列中的元素個數
void print(char** hostInfo, int elementCount)
{
for (int i = 0; i < elementCount; i++)
{
printf("%s\n", hostInfo[i]);
}
}


void findCppStyle()
{
cout << "input your ip address:" << endl;
string address;
cin >> address;
string block1, block2, block3, block4;
int dot1 = address.find(".", 0);
assert(dot1 != string::npos);
block1 = address.substr(0, dot1);
//find函式的功能是從string中尋找指定字元,找到則返回該字元地址
int dot2 = address.find(".", dot1 + 1);
//string::npos表示到達字串的尾部
assert(dot2 != string::npos);
block2 = address.substr(dot1 + 1, dot2 - dot1 - 1);


int dot3 = address.find(".", dot2 + 1);
assert(dot3 != string::npos);
block3 = address.substr(dot2 + 1, dot3 - dot2 - 1);


assert(address.find(".", dot3 + 1) == string::npos);
block4 = address.substr(dot3 + 1, address.size() - dot3 - 1);


cout << block1 << endl;
cout << block2 << endl;
cout << block3 << endl;
cout << block4 << endl;
}


int main()
{
findCppStyle();
char ip[35] = { 0 };
printf("input your ip address:");
scanf("%s", ip);
char** hostInfo = mallocChar(ipCount, maxHostLen);
if (findCstyle(ip, hostInfo))
{
printf("output is :\n");
print(hostInfo, ipCount);
}
else
{
printf("fail\n");
}
freeChar(hostInfo, ipCount);
return 0;
}

相關推薦

十進位制表示IP地址解析方法

#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> #include <ctype.h> #include <string> #incl

IP地址十進位制與二進位制整數之間的轉換

error C4996: 'inet_addr': Use inet_pton() or InetPton() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS to disable deprecated API warnin

十進位制ip地址轉為十進位制數字地址-python3實現

0.摘要 本文主要介紹32位二進位制ip地址和十進位制數字地址相互轉換方式,並用python3實現。 1.ip地址與數字地址轉換關係 我們知道ip地址實際上是32位二進位制數,例如: 點分十進IP地址100.4.5.6 <---->32位二進位制數01

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

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

inet_ntoa()網路位元組序IP轉化為十進位制IP

程式示例1: 下面這個例子來自MSDN: #include <winsock2.h> #include <stdio.h> #include <windows.h> #pragma comment(lib, "wininet.lib") // link wi

linux 中IP十進位制與數值之間轉換函式

#include <arpa/inet.h> int inet_pton(int family,const char * strptr,void * addrptr); 返回:

Linux環境下十進位制和整型IP間的相互轉換

本文介紹Linux環境下使用Unix網路程式設計實現點分十進位制和整型ip地址間的相互轉換,以及那些應該規避的問題。 先從示例程式碼講起: //輸入點分十進位制的IP,將其轉換成整型後,再反向轉換進行驗證 #include <string.h>

HBase啟動時IP地址解析不正確的問題及解決方法

HBase啟動時遇到IP地址解析不正確,連不上Regionserver , 配置檔案上寫的 192.168.100.28, 錯誤資訊  Problem binding to /202.102.110.204:60020 : Cannot assign requested address 。 配置的地

IP十進位制數的字串之間的轉換(c++)

自己寫的一個IP地址與點分十進位制數的字串之間的轉換的示列: #include "stdafx.h" #include <iostream> #include <string&g

ip(十進位制 二進位制整數)之間的轉換

  linux的套接字部分比較容易混亂,在這裡稍微總結一下。   地址轉換函式在地址的文字表示式和它們存放在套接字地址結構中的二進位制值進行轉換。   地址轉換函式有四個:其中inet_addr 和 inet_ntoa適用於IPv4,inet_pton 和

C模擬實現十進位制IP轉換

宣告:本文在32位機器上測試無誤 點分十進位制 點分十進位制是計算機網路中的一個名詞,是一種網路地址的表示方法,每一組數字都是在0~255之間,每個組之間都是通過"."來進行分割的,本文主要是講3

linux 獲取本機MAC/IP地址方法

linunx 編程 mac 地址功能:查詢本機IP/MAC地址,過濾掉127.0.0.1 loop-back 地址適用:linux, ubuntu 16.04 調試通過#include <stdlib.h>#include <stdio.h>#include <unistd.h&

PHP獲取IP地址方法,防止偽造IP地址註入攻擊

false online ESS -a null del known sdn 信息 原文:PHP獲取IP地址的方法,防止偽造IP地址註入攻擊PHP獲取IP地址的方法 /** * 獲取客戶端IP地址 * <br />來源:ThinkPHP * &

Linux系統配置靜態IP地址方法與SecureCRT和RHEL7的連線

Linux系統配置靜態IP地址的方法與SecureCRT和RHEL7的連線 Linux和Windows的區別 Linux中靜態IP地址的配置 Linux和Windows的區別 剛剛安裝的Linux系統與Windows一樣,預設的都是採用DHC

JavaScript獲取IP地址方法

最近公司新加了一個需求,根據使用者登入的IP地址判斷是否重複登入,重複登入就進行逼退,那麼怎麼獲取到瀏覽器的IP地址呢?最後發現搜狐提供了一個JS介面,可以通過它獲取到客戶端的IP。   介面地址如下: http://pv.sohu.com/cityjson?ie=utf-8 &n

Oracle記錄連線使用者IP地址方法

我們都知道在v$session中記錄著客戶端的機器名稱,但是沒有IP,那我們如何讓v$session中也記錄IP的資訊呢? 1.首先,利用 DBMS_SESSION 過程包,先執行: BEGIN DBMS_SESSION.set_identifier(SYS_CONTEXT('USERENV', 'I

Oracle記錄連接用戶IP地址方法

create order 觸發器 logo 沒有 ace ipa ram ogr 我們都知道在v$session中記錄著客戶端的機器名稱,但是沒有IP,那我們如何讓v$session中也記錄IP的信息呢? 1.首先,利用 DBMS_SESSION 過程包,先執行: BEGI

963IP----分享電腦IP地址更換方法

使用網路工作,少不了會遇到IP衝突,IP被限制等等情況,遇到這些情況,都需要通過換IP來解決,那麼電腦IP地址更換方法有哪些?下面963IP分享下電腦IP地址更換方法:     電腦IP地址更換方法     找到當前的網路連結,左鍵點選會彈出一個視窗,然後點選“開

SSG5簡易配置命令及忘記登入密碼和裝置ip地址方法

2、  ssg5-serial-> set admin name                XXX            //設定登入使用者名稱 3、  ssg5-serial-> set admin password  ***    //設定登入密碼 4、  ssg5-serial-

linux下修改IP地址方法

1. 網絡卡的命名規則 在centos7中,en表示著:ethernet乙太網,即現在所用的區域網,enX(X常見有以下3種類型) 型別 說明 o 主機板板載網絡卡,整合裝置的裝置索引