[PTA]实验8-2-10 IP地址转换

Posted Spring-_-Bear

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[PTA]实验8-2-10 IP地址转换相关的知识,希望对你有一定的参考价值。

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

输入格式:

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

输出格式:

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

输入样例:

11001100100101000001010101110010

输出样例:

204.148.21.114
  • 提交结果:

在这里插入图片描述

  • 源码:
#include<stdio.h>
#include<math.h>
int main(void)
{
	char ipStr[32];	// 输入的二进制字符串
	int Ip[33];		// Ip[0]不使用,将输入的字符串转化为对应的整型数组

	scanf("%s", ipStr);

	// 将输入的字符串转化为对应的整型数组,从Ip[1]到Ip[32]
	for (int i = 0; i < 32; i++)
	{
		Ip[i + 1] = ipStr[i] - '0';
	}

	// Ip地址的四位:num1.num2.num3.num4
	int num1, num2, num3, num4;

	num1 = num2 = num3 = num4 = 0;

	// 每八位二进制数组成一位IP地址,按权相乘求和
	int index = 7;
	
	for (int i = 1; i <= 32; i++)
	{
		// 第一段,得第一个ip地址,下同
		if (i >= 1 && i <= 8)
		{
			num1 += Ip[i] * pow(2, index);
		}
		else if (i >= 9 && i <= 16)
		{
			num2 += Ip[i] * pow(2, index);
		}
		else if (i >= 17 && i <= 24)
		{
			num3 += Ip[i] * pow(2, index);
		}
		else if (i >= 25 && i <= 32)
		{
			num4 += Ip[i] * pow(2, index);
		}

		index--;

		// 下一段IP开始的权为7
		if (index < 0)
		{
			index = 7;
		}
	}

	printf("%d.%d.%d.%d", num1, num2, num3, num4);

	return 0;
}

以上是关于[PTA]实验8-2-10 IP地址转换的主要内容,如果未能解决你的问题,请参考以下文章

NAT静态网络地址转换

eNSP模拟实验-路由器配置NAT网络地址转换

[PTA]实验7-3-7 字符转换

[PTA]实验10-9 十进制转换二进制

[PTA]实验2-1-2 温度转换

[PTA]实验2-3-5 输出华氏-摄氏温度转换表