-
实现点分十进制的IP地址标识方法》,要求是“从IP数据报头中取出源和目的地址,将它们以点分十进制表示输出...
2012-12-31 17:40:05编写计算机程序,实现点分十进制的IP地址标识方法》,要求是“从IP数据报头中取出源和目的地址,将它们以点分十进制表示输出” -
将ip地址转换为点分十进制表示
2020-07-04 20:29:36IPv4中用四个字节表示一个IP地址,每个字节按照十进制表示为0~255。 点分十进制就是用4个从0~255的数字,来表示一个IP地址。 char * my_DotDec(unsigned int ip,char *buffer); 参数说明: value:欲转换的数数值。 ...题目描述:
实现函数将 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地址用16位的char数组存放
2015-11-27 10:49:03比如11010011 1000101 11000110 11011111,用点分十进制表示就是我们熟悉的211.69.198.223。 如果要把“211.69.198.223”存放到char数组中时,很自然地觉得,一个char表示8位,32位IP地址用4个char就行了(因为IPip地址什么时候要用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存放起来就是
255.255.255.255存放起来就是
当然,上面讲的是需要将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
-
将点分十进制转换为ip地址表示
2020-07-06 01:02:27实现函数将点分十进制表示的字符串转换为 unsigned int 整型数值 unsigned int my_ResDotDec(const char *strip); 参数说明:strip 点分十进制表示的字符串; 示例: strip =“128.11.3.31” ; 返回值: 2148205343; ...问题描述:
实现函数将点分十进制表示的字符串转换为 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类网络地址数量较少,可以用于主机数达... -
C语言笔记:进制转换与32位二进制IP地址转换十进制问题
2019-10-02 16:35:06问题描述: 假设需要编写一个程序,实现32位二进制IP地址(32个字符长的1和0)转换为点分十进制...假设正在读取表示IP地址的字节流,任务是将32个字符长的1和0(位)序列转换为点分十进制格式,IP地址的点分十进制... -
C/C++程序开发(07):点分十进制表示的IP地址解析方法
2017-10-16 22:28:45//功能:从给定的ip地址中解析点分字符串 //参数:ipAddr 要解析的ip地址 //参数:hostInfo 保存解析结果 //返回值:解析成功返回TRUE,失败返回False bool findCstyle(char* ipAddr, char**& hostInfo) { int ... -
10位十进制ip地址表示方法
2008-09-09 23:14:001033492958 (十进制) = 00111101100110011101100111011110(二进制) 方法如下:一个ip分四段,每段一个 八位二进制,合在一起就是了 00111101 10011001 11011001 11011110=1033492958 61 153 -
某个IP地址的十六进制表示是C22F1481,试将其转换为点分十进制的形式.这个地址是哪一类IP地址?
2021-04-01 11:48:20十六进制表示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.... -
2105:IP Address:32位二进制转IP地址 0msAC
2020-04-04 19:37:02IP地址的点分十进制格式是一次将8位分组,然后将二进制表示形式转换为十进制表示形式。 任何8位都是IP地址的有效部分。 要将二进制数转换为十进制数,请记住两个都是位置数字系统,其中二进制系统的前8个位置是: ... -
IP地址点分表示法与十进制表示法的转换
2004-10-28 10:57:00' 'IP地址点分表示法转换为十进制表示法 ' PublicSharedFunctionDot2LongIP()FunctionDot2LongIP(ByValdotIPAsString)AsLong '使用正则表达式进行IP地址检验 DimsubIPAs... -
百度面试题------将一个电分十进制的IP地址转换为一个32位的整数,要求一一对应
2017-09-22 12:24:18解题思路:IP地址通常是用点分十进制表示,但它其实是一个32位的二进制。 10.2.3.5 000001010.00000010.00000011.00000101 每一个部分都是一个字节,8个bit位。 int IpToInt(string s) { int ret=0; int num=0... -
[ java ] 一个IP地址是用四个字节(每个...请将32位二进制码表示 的IP地址转换为十进制格式表示的IP地址输出。
2018-12-30 11:24:05import 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数据报头中抽出源地址和目的地址,将它们以点分十进制表示输出。
2009-10-28 09:45:21编写计算机程序,从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地址的两种表示方法:整数和点分十进制`
2016-05-22 20:36:08IP地址有两种表示方法:整数和点分十进制` 从下面的例子可以看出,整数1945097072和115.239.211...1945097072的十六进制表示是73 EF D3 70,每个字节转换成十进制表示就是115.239.211.112 2.点分十进制到整 -
IP地址的分类 十进制与二进制的转换
2021-01-12 22:02:25地址范围从1.0.0.1到127.255.255.254 (二进制表示为:00000001 00000000 00000000 00000001 - 01111111 11111111 11111111 11111110)。最后一个是广播地址。 B类IP地址B类IP地址就由2字节的网络地址和2... -
怎样快速对二进制和十进制进行互转化——IP地址规划与设计总结
2015-08-07 17:17:14最近一直在看全国计算机三级网络技术这本书,看到第二章的时候,不免会遇到计算机中最常用的进制转换问题。什么IP地址,什么子网掩码,... IP地址是由网络号与主机号组成的,长度是32bit,用点分十进制方法表示,这样 -
sql2005 ip地址点分十进制与长整形表示法相互转换
2012-08-06 17:07:29在数据库设计时,为了查询效率,常常把点分十进制表示的ip地址设计为bigint类型。存储的时候,怎么把点分十进制转换为bigint,请参考下面的sql自定义函数: USE [temp] GO /****** 对象: UserDefinedFunction ... -
十六进制编码_使用十六进制IP地址的网络钓鱼攻击活动
2021-01-15 14:44:13网络犯罪分子正在不断优化其网络攻击工具,策略和技术,以逃避垃圾...由于IP地址可以用多种格式表示,因此可以在URL中如下所示使用:点分十进制IP地址:216.58.199.78八进制IP地址:0330.0072.0307.0116(将每个十进... -
计算机网络 网络层 虚电路服务 数据报服务 IPV4地址概述 点分十进制表示法 子网掩码 IP数据报的发送和转发...
2021-01-11 19:31:19点分十进制表示法四、IPv4地址编址方法经历的三个阶段1. 分类编址2. 划分子网3. 无分类编址五、IPv4地址的应用规划六、IP数据报的发送和转发过程七、静态路由配置及其可能产生的路由环路问题八、路由选择协议概述1.... -
二进制 十进制 十六进制
2010-08-23 00:54:46二进制表示IP地址的方法通常都是四个八位组的二进制如“00000000 00000000 00000000 11111111” 每八个位一组,共四组,在现实生活中人的大脑不肯能记忆到这么多东西,所以人们通常采用点分十进制的方法来表示IP地址... -
达内-网络工程-IP地址的认识以及二进制与十进制的转换方法
2017-11-12 17:16:19本文整体内容包括以下几个部分:IP地址简要介绍IP地址的作用IP地址的表示2进制与10进制的转换IP地址的结构子网掩码IP地址的管理IP地址的分类IP地址的问题IP地址解决方案IP地址的简要介绍: 凡是能够上网的设备,必须...