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

    千次阅读 2020-07-04 20:29:36
    点分十进制(Dotted Decimal Notation)全称为点分式)十进制表示法, 是IPv4的IP地址标识方法。 IPv4中用四个字节表示一个IP地址,每个字节按照十进制表示为0~255。 点分十进制就是用4个从0~255的数字,来表示...

    将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),用“ ”括起来,第三个参数是输入的数据。

    展开全文
  • 十进制ip地址转化为字符串点分十进制ip地址 在使用linux下udp的socket时,发现服务端不需要连接客户端,并且 ,每次接收数据时,都需要预先定义一个变量来保存发送数据端(客户端)ip地址,其中系统调用里面的ip...

    将十进制ip地址转化为字符串点分十进制ip地址

    在使用linux下udp的socket时,发现服务端不需要连接客户端,并且 ,每次接收数据时,都需要预先定义一个变量来保存发送数据端(客户端)ip地址,其中系统调用里面的ip地址是一个入参:
    #include <sys/socket.h>
    
    ssize_t recvfrom(int sockfd, void *buff, size_t lenght, int flags, struct sockaddr *src_addr, socklen_t *addrlen)
    
    Returns number of bytes received, 0 on EOF, or -1 on error
    那么该ip地址就是一个网络序的ip地址,获取到之后,本人想把它以点分十进制的方式打印出来,进过测试,如下方法可行

    #include <stdio.h>
    #include <iostream>
    #include <arpa/inet.h>
    
    using namespace std;
    
    #define NIPQUAD_FMT "%u.%u.%u.%u"
    #define NIPQUAD(addr) \
     ((unsigned char *)&addr)[0],  ((unsigned char *)&addr)[1],  ((unsigned char *)&addr)[2],  ((unsigned char *)&addr)[3]
    
    int main() {
        unsigned int ip;
        ip = htonl(-1062707941);
        printf("ip = " NIPQUAD_FMT "\n", NIPQUAD(ip));
    这里的-1062707941是通过一个udp服务端接收客户端所取得ip地址,然后转为主机序。由于这里的NIPQUAD的参数是网络序,因此这里再次将ip转为网络序
    结果如下:


    展开全文
  • 实现函数将点分十进制表示的字符串转换为 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地址的理解

    千次阅读 2020-06-09 10:36:14
    点分十进制的IP是我们为了方便记忆的书写的形式,比如“192.168.1.1” ip地址共有4个十进制数,每个数占用1个字节,共占用4个字节,32位。 ip地址实际是一个占用4个字节的整型数。 点分十进制,是根据,点分十六...

    点分十进制的IP是我们为了方便记忆的书写的形式,比如“192.168.1.1”

    ip地址共有4个十进制数,每个数占用1个字节,共占用4个字节,32位。

    ip地址实际是一个占用4个字节的整型数。

    点分十进制,是根据,点分十六进制数来的:

    12625937<-----------C0A811<----------C0.A8.1.1------------>192.168.1.1

    (十进制数)<---(十六进制数)<-----(点分十六进制)------>(点分十进制)

    同时可以参考该文

    由以上示例,我们可以看到:

    对于小端的主机:存储的顺序是 01 01 A8 C0

    对于大端的主机:存储的顺序是C0 A8 01 01

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

    千次阅读 2019-08-12 02:22:42
    如果用二进制表示IP地址的话,A类IP地址就由1字节的网络地址和3字节主机地址组成,网络地址的最高位必须是“0”。A类IP地址中网络的标识长度为7位,主机标识的长度为24位,A类网络地址数量较少,可以用于主机数达...
  • //功能:从给定的ip地址中解析点分字符串 //参数:ipAddr 要解析的ip地址 //参数:hostInfo 保存解析结果 //返回值:解析成功返回TRUE,失败返回False bool findCstyle(char* ipAddr, char**& hostInfo) { int ...
  • 编写计算机程序,从IP数据报头中抽出源地址和目的地址,将它们以点分十进制表示输出。
  • #include"csapp.h" /*本代码将点分十进制形式的ip地址转化为十六进制数并且输出*/ //返回一个字符串代表的整数 intstr2int(char*str) { //要注意变量的初始化 intvalue=0; //字符串长度 intlength=...
  • IP地址有两种表示方法:整数和点分十进制` 从下面的例子可以看出,整数1945097072和115.239.211.112表示的是同一个地址 C:\Users\helloworld>ping 1945097072 正在 Ping 115.239.211.112 具有 32 字节的数据: 来自 ...
  • C模拟实现点分十进制IP转换

    千次阅读 2017-05-09 18:35:37
    点分十进制是计算机网络中的一个名词,是一种网络地址表示方法,每一组数字都是在0~255之间,每个组之间都是通过"."来进行分割的,本文主要是讲32位的转化,也就是IPv4地址表示方法。(Ipv6同理可得) 实现...
  • 计算机访问互联网,首先要配置一个IP地址IP地址是由32位二进制组成的 IP地址总共有五类:A、B、C、D、E,用的最多的是前三类,D和E类保留不用 0000 0000.0000 0000.0000 0000.0000 000 A类地址的范围: 0000 0000....
  • 在数据库设计时,为了查询效率,常常把点分十进制表示ip地址设计为bigint类型。存储的时候,怎么把点分十进制转换为bigint,请参考下面的sql自定义函数: USE [temp] GO /****** 对象: UserDefinedFunction ...
  • 十六进制表示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地址与主机表示不同,本程序通过转换来表示
  • include "csapp.h" void main(int argc,char* argv[]) ... printf("点分十进制形式为:\t%d.%d.%d.%d\n",dd[0],dd[1],dd[2],dd[3]); } 转载于:https://my.oschina.net/zzw922cn/blog/470832
  • 给你IP地址让你算出掩码(点分十进制),子网地址,广播地址。 像要算出IP地址的掩码,子网地址,广播地址,先要记住几。1:IP地址(A B C 三类)属于有类地址。A类地址掩码8位,B类地址16位,C类地址24位。 2:二...
  • 本文介绍Linux环境下使用Unix网络编程实现点分十进制和整型ip地址间的相互转换,以及那些应该规避的问题。 先从示例代码讲起: //输入点分十进制的IP,将其转换成整型后,再反向转换进行验证 #include #include...
  • 点分十进制(Dotted Decimal Notation)全称为点分式)十进制表示法, 是IPv4的IP地址标识方法。 IPv4中用四个字节表示一个IP地址,每个字节按照十进制表示为0~255。 点分十进制就是用4个从0~255的数字,来表示...
  • 点分十进制记的IP地址转换成为网络字节序的S_addr类型的IP地址  inet_ntoa(addrClient.sin_addr);将网络字节序的S_addr类型的IP地址转换成为点分十进制记的IP地址 (2) 端口号相关, htonl()和htons...
  • ~此功能使用java工具访问您的IP地址。 ~然后将IP地址转换为二进制,可以作为ip的四部分... ~除了 IP 以十进制和二进制显示,但请注意,使用 'disp' 函数显示的二进制输出是字符串形式。 如果不需要,您可以将其删除。
  • 解题思路:IP地址通常是用点分十进制表示,但它其实是一个32位的二进制。 10.2.3.5 000001010.00000010.00000011.00000101 每一个部分都是一个字节,8个bit位。 int IpToInt(string s) { int ret=0; int num=0...
  • 什么是点分十进制

    千次阅读 2020-11-07 21:53:27
    ip地址10000001.00110100.00000000.00001111的点分十进制写法?
  • 将长整型IP地址转换成点分十进制

    千次阅读 2019-09-04 13:51:46
    struct acd_host *acd = user_data; struct in_addr addr; char *a; addr.s_addr = htonl(acd->ac_ip); a = inet_ntoa(addr); connman_dbus_dict_append_basic(iter, "Address", DBU...
  • inet_ntoa()函数(IP地址转换函数)能把网络字节序IP转化点分十进制IP;inet_ntoa()返回的字符串存放在WINDOWS套接口实现所分配的内存中。 目 录 1函数信息 2程序示例 ...
  • //以IP地址形式输出//此题意在位转换,每八位为一段#include &lt;stdio.h&gt;int bin_to_dec(int i) //将位置二进制字符转换为十进制数{ int sum = 1; int j; for(j = 0; j &lt; i; j ++) { ...
  • 地址范围从1.0.0.1到127.255.255.254 (二进制表示为:00000001 00000000 00000000 00000001 - 01111111 11111111 11111111 11111110)。最后一个是广播地址。 ​ B类IP地址B类IP地址就由2字节的网络地址和2...
  • 问题描述: 假设需要编写一个程序,实现32位二进制IP地址(32个字符长的1和0)转换为点分十进制...假设正在读取表示IP地址的字节流,任务是将32个字符长的1和0(位)序列转换为点分十进制格式,IP地址的点分十进制...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 71,827
精华内容 28,730
关键字:

点分十进制表示ip地址