精华内容
下载资源
问答
  • 编写计算机程序,实现点分十进制的IP地址标识方法》,要求是“从IP数据报头中取出源和目的地址,将它们以点分十进制表示输出”
  • ip地址转换为点分十进制表示

    千次阅读 2020-07-04 20:29:36
    IPv4中用四个字节表示一个IP地址,每个字节按照十进制表示为0~255。 点分十进制就是用4个从0~255的数字,来表示一个IP地址。 char * my_DotDec(unsigned int ip,char *buffer); 参数说明: value:欲转换的数数值。 ...

    将ip地址转换为点分十进制表示

    题目描述:

    实现函数将 unsigned int 整型数值转为点分十进制记法表示:
    点分十进制(Dotted Decimal Notation)全称为点分(点式)十进制表示法,
    是IPv4的IP地址标识方法。
    IPv4中用四个字节表示一个IP地址,每个字节按照十进制表示为0~255。
    点分十进制就是用4个从0~255的数字,来表示一个IP地址。
    char * my_DotDec(unsigned int ip,char *buffer);
    参数说明:
    value:欲转换的数数值。
    buffer:目标字符串的地址。
    示例: ip = 2148205343; buffer = “128.11.3.31”;

    分析:

    灵活地利用联合体内存共享的特点
    题目中要求将数字转换成字符串,我们就要想到使用sprintf函数,

    代码:

    union IPNode
    {
     unsigned int addr;
     struct
     {
      unsigned char s1;
      unsigned char s2;
      unsigned char s3;
      unsigned char s4;
     };
    };
    char* my_DotDec(unsigned int ip,char *buffer)
    {
     IPNode x;
     x.addr = ip;      
     sprintf(buffer,"%d.%d.%d.%d",x.s4,x.s3,x.s2,x.s1); 
     return buffer;         
    }
    

    注意事项:

    windows系统下栈是在低地址,堆在高地址栈和堆从中间向两头扩展,LINUX系统上是从两头向中间扩展,pc端是小端–低地址存放低数据而x又是从堆上开辟的(因为结构体的定义是在函数的外面,如果结构体定义在函数内部就是从栈上开辟),堆是由低地址向高地址开辟内存,所以s4在高地址,存放的是大数据。sprintf函数的第一个参数是字符串的输入指向char指针型,第二个参数是控制输入的字符的形式(%d,%f,%0x,%x),用“ ”括起来,第三个参数是输入的数据。

    展开全文
  • 比如11010011 1000101 11000110 11011111,用点分十进制表示就是我们熟悉的211.69.198.223。 如果要把“211.69.198.223”存放到char数组中时,很自然地觉得,一个char表示8位,32位IP地址用4个char就行了(因为IP

    ip地址什么时候要用16位char数组存放

    ip地址实际上是用32bit的二进制数来表示的,

    比如11010011 1000101 11000110 11011111,用点分十进制表示就是我们熟悉的211.69.198.223。

    如果要把“211.69.198.223”存放到char数组中时,很自然地觉得,一个char表示8位,32位IP地址用4个char就行了(因为IP地址是0~255,所以如果用4个char来表示,应该使用的是unsigned char)。但是这给打印带来了不便,如果把这4个char打印出来,输出的不是点分十进制的IP地址,而是4个拓展ansii字符。因此一般是用16位的char(signed char即可)来存放ip,一个char存放一个数字或点分隔符(“.”),最后是字符串的null终止符。比如:

    211.69.198.223存放起来就是

    ip地址什么时候要用16位char数组存放

    255.255.255.255存放起来就是

    ip地址什么时候要用16位char数组存放

    当然,上面讲的是需要将ip地址打印出来的情况下,用16位char数组来存放ip地址。如果不需要打印,那么用4个unsigned char来存放ip地址完全没问题

     

    至于IPv6地址,是128bit,通常写成8组,每组4个16位进制数,例如2001:250:4000:8039:a51b:6fc1:2d97:fe14,一个16进制数4bit(0~f对应0000~1111),16*4*8=128bit

    展开全文
  • 实现函数将点分十进制表示的字符串转换为 unsigned int 整型数值 unsigned int my_ResDotDec(const char *strip); 参数说明:strip 点分十进制表示的字符串; 示例: strip =“128.11.3.31” ; 返回值: 2148205343; ...

    将点分十进制转换为ip地址表示

    问题描述:

    实现函数将点分十进制表示的字符串转换为 unsigned int 整型数值
    unsigned int my_ResDotDec(const char *strip);
    参数说明:strip 点分十进制表示的字符串;
    示例: strip =“128.11.3.31” ; 返回值: 2148205343;

    分析:

    灵活运用联合体的特点,ip地址为unsigned int类型,点分十进制的字符相当于4个用’.'分开的unsigned char类型,所以我们可以设计一个联合体IPNode来保存strip。因为strip字符串中有效信息是被3个’.'字符隔开的,所以我们要想到使用strchr函数。
    **char strchr(const char s, int c);
    它表示在字符串 s 中查找字符 c,返回字符 c 第一次在字符串 s 中出现的位置,如果未找到字符 c,则返回 NULL。也就是说,strchr 函数在字符串 s 中从前到后(或者称为从左到右)查找字符 c,找到字符 c 第一次出现的位置就返回,返回值指向这个位置,如果找不到字符 c 就返回 NULL。
    类似的函数还有
    **char strrchr(const char s, int c);
    与 strchr 函数一样,它同样表示在字符串 s 中查找字符 c,返回字符 c 第一次在字符串 s 中出现的位置,如果未找到字符 c,则返回 NULL。但两者唯一不同的是,strrchr 函数在字符串 s 中是从后到前(或者称为从右向左)查找字符 c,找到字符 c 第一次出现的位置就返回,返回值指向这个位置。下面的示例代码演示了两者之间的区别:

    union IPNode
    {
        unsigned int addr;
    	struct
    	{
    			unsigned char uc[4];
    	};
    };
    

    代码:

    union IPNode
    {
      unsigned int addr;
      struct 
      {
      	 unsigned char uc[4];
      };
    };
    unsigned int my_ResDotDec(const char*strip)
    {
    	IPNode x;
    	int i = 3;
    	while(i >= 0)//正常情况下固定循环4次,读取4次数据
    	{
    		int a = atoi(strip);
    		if(a > 255) return -1;
    		x.uc[i] = a;
    		--i;
    		strip = strchr(strip,'.');
    		if(strip == NULL) break;
    		strip+=1;//strip此时指向的是'.',所以要+1
    	}
    	if(i >= 0 && strip == NULL)//如果提前出循环
    	{
    		return -1;
    	}
    	else if(strip != NULL)//如果循环退出后,字符串还没有走完
    	{
    		return -1;
    	}
    	return x.addr;
    }
    

    注意事项:

    灵活运用字符串的各类函数,sprintf,strchr…,当遇到一个不熟悉但是好用的函数时,一定要积累下来,以后写代码的时候可能会用到!!

    展开全文
  • 进制·IP地址转换

    千次阅读 2017-12-14 18:33:09
    请将32位二进制码表示IP地址转换为十进制格式表示IP地址输出。 输入格式: 输入在一行中给出32位二进制字符串。 输出格式: 在一行中输出十进制格式的IP地址,其由4个十进制数组成(分别对应4个8位的二进制...

    7-13 IP地址转换(30 分)

    一个IP地址是用四个字节(每个字节8个位)的二进制码组成。请将32位二进制码表示的IP地址转换为十进制格式表示的IP地址输出。

    输入格式:

    输入在一行中给出32位二进制字符串。

    输出格式:

    在一行中输出十进制格式的IP地址,其由4个十进制数组成(分别对应4个8位的二进制数),中间用“.”分隔开。

    输入样例:

    11001100100101000001010101110010
    

    输出样例:

    204.148.21.114
    

    #include<stdio.h>

    #include<string.h>
    #include<math.h>
    int main(){
        int i,a[100]={0};
      char c[33];
      gets(c);
      for(i=0;i<32;i++){
        a[i]=c[i]-'0';
      }
      int n=0;
      double sum=0,suuu=0,smmm=0,ssum=0;
      for(i=7;i>=0;i--){
        sum=sum+a[i]*pow(2,n);
        n++;
      }
    n=0;
      for(i=15;i>=8;i--){
        suuu=suuu+a[i]*pow(2,n);
        n++;
      }
    n=0;
      for(i=23;i>=16;i--){
        smmm=smmm+a[i]*pow(2,n);
        n++;
      }
    n=0;

      for(i=31;i>=24;i--){
        ssum=ssum+a[i]*pow(2,n);
        n++;
      }
      printf("%.f.%.f.%.f.%.f",sum,suuu,smmm,ssum);
      return 0;
    }
    展开全文
  • IP 点分十进制表示

    2019-08-12 02:22:42
    如果用二进制表示IP地址的话,A类IP地址就由1字节的网络地址和3字节主机地址组成,网络地址的最高位必须是“0”。A类IP地址中网络的标识长度为7位,主机标识的长度为24位,A类网络地址数量较少,可以用于主机数达...
  • 问题描述: 假设需要编写一个程序,实现32位二进制IP地址(32个字符长的1和0)转换为点分十进制...假设正在读取表示IP地址的字节流,任务是将32个字符长的1和0(位)序列转换为点分十进制格式,IP地址的点分十进制...
  • //功能:从给定的ip地址中解析点分字符串 //参数:ipAddr 要解析的ip地址 //参数:hostInfo 保存解析结果 //返回值:解析成功返回TRUE,失败返回False bool findCstyle(char* ipAddr, char**& hostInfo) { int ...
  • 10位十进制ip地址表示方法

    千次阅读 2008-09-09 23:14:00
    1033492958 (十进制) = 00111101100110011101100111011110(二进制) 方法如下:一个ip分四段,每段一个 八位二进制,合在一起就是了 00111101 10011001 11011001 11011110=1033492958 61 153
  • 十六进制表示ip地址的时候两位一个停顿 c2 = 12 * 16 + 2 = 194 2f = 2 * 16 + 15 = 47 14 = 1 * 16 + 4 = 20 81 = 8 * 16 + 1 = 129 19.47.20.129 下面看好了,我这个才是正确的: A类网络的回答IP地址范围为1.0....
  • IP地址的点分十进制格式是一次将8位分组,然后将二进制表示形式转换为十进制表示形式。 任何8位都是IP地址的有效部分。 要将二进制数转换为十进制数,请记住两个都是位置数字系统,其中二进制系统的前8个位置是: ...
  • ' 'IP地址点分表示法转换为十进制表示法 ' PublicSharedFunctionDot2LongIP()FunctionDot2LongIP(ByValdotIPAsString)AsLong '使用正则表达式进行IP地址检验 DimsubIPAs...
  • 解题思路:IP地址通常是用点分十进制表示,但它其实是一个32位的二进制。 10.2.3.5 000001010.00000010.00000011.00000101 每一个部分都是一个字节,8个bit位。 int IpToInt(string s) { int ret=0; int num=0...
  • import java.util.Scanner; public class Review {...// 二进制转换成十进制 c[i] /= 10; } if(i!=3) System.out.print(b[i]+"."); else System.out.print(b[i]); } input.close(); } }  
  • 编写计算机程序,从IP数据报头中抽出源地址和目的地址,将它们以点分十进制表示输出。
  • IP地址如何用十六进制表示

    千次阅读 2015-01-11 23:55:31
    例如IP:202.204.120.63 如何用十六进制表示? 方法一:累加法  十进制IP总和=202*2^24+204*2^16+120*2^8+63  =3402397759  结果转为十六CACC783F 方法二、分解法
  • IP地址有两种表示方法:整数和点分十进制` 从下面的例子可以看出,整数1945097072和115.239.211...1945097072的十六进制表示是73 EF D3 70,每个字节转换成十进制表示就是115.239.211.112 2.点分十进制到整
  • 地址范围从1.0.0.1到127.255.255.254 (二进制表示为:00000001 00000000 00000000 00000001 - 01111111 11111111 11111111 11111110)。最后一个是广播地址。 ​ B类IP地址B类IP地址就由2字节的网络地址和2...
  • 最近一直在看全国计算机三级网络技术这本书,看到第二章的时候,不免会遇到计算机中最常用的进制转换问题。什么IP地址,什么子网掩码,... IP地址是由网络号与主机号组成的,长度是32bit,用点分十进制方法表示,这样
  • 在数据库设计时,为了查询效率,常常把点分十进制表示ip地址设计为bigint类型。存储的时候,怎么把点分十进制转换为bigint,请参考下面的sql自定义函数: USE [temp] GO /****** 对象: UserDefinedFunction ...
  • 网络犯罪分子正在不断优化其网络攻击工具,策略和技术,以逃避垃圾...由于IP地址可以用多种格式表示,因此可以在URL中如下所示使用:点分十进制IP地址:216.58.199.78八进制IP地址:0330.0072.0307.0116(将每个十进...
  • 点分十进制表示法四、IPv4地址编址方法经历的三个阶段1. 分类编址2. 划分子网3. 无分类编址五、IPv4地址的应用规划六、IP数据报的发送和转发过程七、静态路由配置及其可能产生的路由环路问题八、路由选择协议概述1....
  • 进制表示IP地址的方法通常都是四个八位组的二进制如“00000000 00000000 00000000 11111111” 每八个位一组,共四组,在现实生活中人的大脑不肯能记忆到这么多东西,所以人们通常采用点分十进制的方法来表示IP地址...
  • 本文整体内容包括以下几个部分:IP地址简要介绍IP地址的作用IP地址表示2进制与10进制的转换IP地址的结构子网掩码IP地址的管理IP地址的分类IP地址的问题IP地址解决方案IP地址的简要介绍: 凡是能够上网的设备,必须...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,050
精华内容 820
关键字:

十进制表示ip地址