字符型IP地址与整型之间转换

    IP地址是一个32位的二进制数,通常被分割为4个“8位二进制数”(也就是4个字节)。IP地址通常用“点分十进制”表示成(a.b.c.d)的形式,其中,a,b,c,d都是0~255之间的十进制整数。例:点分十进IP地址(100.4.5.6),实际上是32位二进制数(01100100.00000100.00000101.00000110)。

1.字符型IP地址转换为整型。即给定一个IP地址将其转换成32的无符号整数。例如:192.168.0.1 对应的32位二进制表示为:11000000101010000000000000000001。将这个32位2进制转换为整数为:3232235521.

2.整数转换为字符型IP地址。例如:给一个整型3232235521,其对应的32位二进制为:11000000101010000000000000000001。将这个2进制分成4组,每组8位,然后变成IP地址为192.168.0.1.

变成主要涉及:移位操作、字符型转换为整型、整型转换为字符型。

(1)位操作

    int  a=b<<n;   //b向左移n位,并把结果赋值给a    ;int a=b>>n;   //b向右移n位,并把结果赋值给a  ; int  a=15; int b=2;  int c=a&b; //a与b按位与运算,把结果赋值给c

   位逻辑运算符:&(位“与”)、^(位“异或”)、|(位“或”)和~(位“取反”)
    移位运算符:<<(左移)和>>(右移).


(2)字符型转换为整型

num=atoi(str[i].c_str());

(3)整型转换为字符型

int n;

string s;

stringstream  ss;

ss<<n;

ss>>s;

代码

// test.cpp : 定义控制台应用程序的入口点。
//主要实现:1.字符型IP地址转换为整型;2.整型转换为字符型IP地址

#include "stdafx.h"
#include<iostream>
#include<stdlib.h>
#include<sstream>
#include<string>
using namespace std;
//字符IP地址转换为整型
unsigned int IPtoInt(string& s)
{
	string str[4];
	int start=0,n=0;

	 unsigned int num;
	 unsigned int a=0;
	 unsigned int sum=0;
		for(int i=0;i<4;i++)
	    {
		start=s.find('.',n);
		if(start==-1)
			start=s.size();
		 str[i]=s.substr(n,start-n);
		 n=start+1;

		num=atoi(str[i].c_str());
		a=num<<8*(3-i);
		sum+=a;

	    }
		return sum;
}
//整型数转换为字符型的IP地址
string InttoIP(unsigned int n)
{
	unsigned int num;
	unsigned int m=255;
	string str="",s;
	for(int i=0;i<4;i++)
	{
		stringstream ss;   //注意此处的声明不能在for循环外面,否则转换为s的字符串始终为第一次的值
		num=n&m;
		m=m<<8;
		num=num>>8*i;
		ss<<num;
		ss>>s;
		if(i!=3)
		{
			s="."+s;
			str=s+str;
		}
		else
			str=s+str;
	}
	return str;
}
int _tmain(int argc, _TCHAR* argv[])
{
	string s="192.168.0.1";
	unsigned int number;
	number=IPtoInt(s);
	cout<<number<<endl;

	unsigned int n=3232235521;
	string str;
	str=InttoIP(n);
	cout<<str<<endl;
	return 0;
}


 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值