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

来源:互联网 发布:如何-创建数据搜索引擎 编辑:程序博客网 时间:2024/06/07 06:50

    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;}elsestr=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;}


 

原创粉丝点击