1. 程式人生 > >演算法練習Ip地址與整數的互相轉換ipstrToint

演算法練習Ip地址與整數的互相轉換ipstrToint

int ipstr2int(const char *ip, unsigned int *ipvalue)
{
	if (ip == NULL || ipvalue==NULL)
		return -1;

	unsigned int	result = 0;
	int	tmp = 0;
	int	shift = 24;
	const char *pEnd = ip;
	const char *pStart = ip;

	while(*pEnd != '\0')
	{
		//到地址符裡的’.’
		while(*pEnd != '.' && *pEnd != '\0')
			pEnd++;
		tmp = 0;
		//計算每個’.’之間的數值
		while(pStart < pEnd)
		{
			tmp = tmp * 10 + (*pStart - '0');
		pStart++;
		}
		if(tmp<0 || tmp >255)
		{
			return -1;
		}
		//將計算好的數值分別左移24位,16位,8位,0位
		result += (tmp << shift);
		shift -= 8;
		if (*pEnd == '\0')
			break;
		pStart = pEnd + 1;
		pEnd++;
	}
	*ipvalue = result;
	return 1;
}


int ip2str(unsigned int ip, char *buf, size_t len)
{
	if(buf == NULL || len<16)
	{
		return -1;
	}
	size_t length = sizeof(ip);//32位ip地址的位元組數
	unsigned char *p = (unsigned char *)&ip+sizeof(ip)-1;//指 向ip地址最高位元組
	char *p1 = buf;
	while(length)
	{
		unsigned char tmp = *p;
		char *pstart= p1;

		do
		{
			*p1++ = tmp%10 +'0';
			tmp /= 10;
		}while(tmp);

		//逆置
		char *pend = p1-1;

		for(;pstart<pend;pstart++,pend--)
		{
			char ch = *pstart;
			*pstart = *pend;
			*pend=ch;
		}

		if(length>1)
			*p1++ = '.';
		length--;

		//迴圈條件轉換
		p--;
	}
	*p1 ='\0';
	return 1;

}


下面是我的答案:Ip轉換到整數

int Ip_to_Int(char *Ipstr)
{
	if(NULL == Ipstr || '\0' == *Ipstr)
		return 0;

	char *pEntry = 0;
	char *pEnd = 0;
	int temp = 0;//用於記錄轉換後數字
	int Resule = 0;
	int count = 0;//用於記錄.的個數 根據這個來移位
	int len = 0;//用於記錄兩個指標間的差

	pEntry = pEnd = Ipstr;

	if(*pEntry >'9' || *pEntry < '0')//如果第一個字元不是數字就返回了
		return 0;

	for (int i = 0; *pEnd != '\0'; i++)
	{
		if(*pEntry >'9' || *pEntry <'0')//不是這個範圍就說明不是數字
			return 0;

		if(*pEnd == '.')
		{
			
			len = pEnd - pEntry;

			for (int k = 0; k <len; k++)
			{
				temp = temp * 10 + (*pEntry  - '0');
				pEntry ++;
			}

			if(temp >255)//大於255說明不是IP
				return 0;

			Resule |= temp<<(count*8);
			count ++;
			//printf("Resule :0x%p\n",Resule);
			temp = 0;
			pEnd ++;//pEnd指向. 應該指向下一個有效數字
			pEntry = pEnd;
		}

		pEnd ++;
	}

	//最後一個不能用.為標誌了
	temp = 0;
	len = pEnd - pEntry;
	for (int j = 0; j < len; j++)
	{
		temp = temp * 10 + (*pEntry  - '0');
		pEntry ++;
	}
	Resule |= temp<<24;

	return Resule;
	//192.168.1.1 0x0101a8c0
}

至於整數到IP 我直接使用了sprintf 作弊了 哈哈
char* Int_to_IP(unsigned int Ip,char* buff)
{
	sprintf(buff,"%u.%u.%u.%u",
		(unsigned char)(*(char*)&Ip),
		(unsigned char)(*(char*)((char*)&Ip + 1)),
		(unsigned char)(*(char*)((char*)&Ip + 2)),
		(unsigned char)(*(char*)((char*)&Ip + 3))
		);

	return buff;
}


相關推薦

演算法練習Ip地址整數互相轉換ipstrToint

int ipstr2int(const char *ip, unsigned int *ipvalue) { if (ip == NULL || ipvalue==NULL) return -

ip地址整數相互轉換

1、ip地址轉成整數 原理:ip地址的每段可以看成是一個0-255的整數,把每段拆分成一個二進位制形式組合起來,然後把這個二進位制數轉變成整數。 舉例:一個ip地址為10.0.3.193每段數字   

java版ip地址整數互相轉換

在工作中可能會遇到將ip地址轉為long型的整數,或者將十進位制整數轉換為ip地址的情況,下面介紹一種轉換的方法。 一、將ip地址轉成long數值 將IP地址轉化成整數的方法如下: 1、通過String的split方法按.分隔得到4個長度的陣列 2、通過左移位操作(<

ip地址整數之間的轉換

IP地址轉換為整數:IP地址每段可以堪稱是8位無符號整數即0~255,把每段拆分成一個二進位制形式,組合起來,然後把這個二進位制數變啊層一個無符號32位整數。整數轉換為IP地址:把這個整數轉換成一個無符號32位二進位制數。從左到右,每八位進行一下分割,得到4段8位的二進位制數,把這些二進位制數轉換成整數然

【轉】IP地址整數之間的轉換

1、IP地址轉換為整數 原理:IP地址每段可以看成是8位無符號整數即0-255,把每段拆分成一個二進位制形式組合起來,然後把這個二進位制數轉變成 一個無符號32為整數。 舉例:一個ip地址為10.0.3.193 每段數字 相對應的二進位制數 10 00001010 0 00

32位二進制IP地址十進制IP地址互相轉換

bin parseint 轉換 idt result 32位 temp str ann 代碼: 1 import java.util.List; 2 import java.util.ArrayList; 3 import java.util.Scanner;

php 版本號 整數化 mysql存儲入庫 比較大小【版本處理類,提供版本數字互相轉換

tro mysql存儲 nload target 版本 存儲 ron 整數 php 下載地址:https://download.csdn.net/download/a724008158/10659015php 版本號 整數化 mysql存儲入庫 比較大小【版本處理類,提供版

IP地址數字地址相互轉換

http://goolgeplus.lofter.com/post/8de0d_d6d0a 站長網IP查詢地址:http://tool.chinaz.com/ip/ 可以看到,IP查詢工具是先將IP段地址轉化成數字地址,再才得到IP的實體地址。 ------------

ip地址整數轉換

inet_addr函式  地址轉換, 把"A.B.C.D"的IP地址轉換為32位長整數 [宣告]  unsigned long inet_addr ( const char FAR *cp ); [引數]  cp - 指向IP地址字串的指標 [返回值]  當函式成功呼叫時

IP地址域名之間的轉換(Windows + Visual Studio 2015)

注意:博主用的visual studio 2015,在windows除錯程式需要連結ws2_32.lib庫,才能正常執行程式。 開啟專案的“Property”->"Linker"->"

ip地址Long型資料進行相互轉換

/** * 根據ip地址計算出long型的資料 * @param ipStr * @return */ public static long ip2Long(String strIP){ long[] ip=new long[4];

IP地址MAC地址

class gateway 運行 釋放 width 無法 是否 adapter sub 眾所周知,每一塊網卡在出廠時都燒錄了世界唯一的MAC地址,使用該地址可以在網絡中識別不同的計算機。同時,互聯網中也使用IP地址來定位客戶端,這是因為IP地址比MAC地址定位更方便,而且也

IP地址子網掩碼

主機 目的 5.0 32位 分開 劃分 做的 等於 網上 一、IP地址 IP地址:Internet上每臺主機都必須有一個唯一的地址以區別於其他主機,這個地址就是Internet地址,也稱作IP地址; IPv4(第四版本的IP協議)是構成現今互聯網技術的基石協議; IP地

Java對象JSON互相轉換jsonlib以及手動創建JSON對象數組——(二)

ring lnl tft sem mkf ted family sae key     首先聲明一下,jsonlib轉換與GSON相比太差勁了,操作不是一般的繁瑣。GSON可以直接轉換成各種集合與對象類型。強烈推薦使用GSON。而且GSON一個方法就可以解決,

IP地址域名的關系

internet 電腦 容易 符號 書寫 int 訪問 最終 之間 1.IP地址:IP地址是用來唯一標識互聯網上計算機的邏輯地址,讓電腦之間可以相互通信. 每臺連網計算機都依靠IP地址來互相區分、相互聯系 2.域名:由於IP地址是數字標識,使用時難以記憶和書寫,因此在I

基礎篇--ip地址子網掩碼的認識

機器 -s white style 大於 進制的轉換 bit 目標 管理 目錄:1、IP地址的作用2、IP地址如何表示3、IP地址的結構4、子網掩碼5、IP地址的分類6、私有IP地址7、二進制與十進制的轉換8、練習題IP地址的作用: 在一定範圍內,唯一的標識,一個上網

js時間毫秒互相轉換

art rep ons 格式 date lac 得到 需要 gettime 1)日期轉換為毫秒 如果格式是:yyyy/mm/dd hh:mm:ss可以直接轉換。var oldTime = (new Date("2018/07/09 14:13:11")).getTime(

json 串字典互相轉換

轉換 pri dump pre 解析 定義 name load import #導入json import json #定義字典 data={‘name‘:‘tom‘,‘age‘:16} #json.dumps轉換字典為json j_data=json.dumps(dat

JQuery擴展方法實現Form表單Json互相轉換

val adjust new 映射 checked josn fin pop undefined JQuery筆記 記兩段代碼,使用JQuery實現從表單獲取json與後端交互,以及把後端返回的json映射到表單相應的字段上。 把表單轉換出json對象 //把表單

百度地圖API實現 地址&經緯度 互相轉換

原文地址:https://blog.csdn.net/a497785609/article/details/72356588 1.根據地址取得經緯度: 請求地址:http://api.map.baidu.com/geocoder/v2/?address=中國成都人才市場&output