4-以IP地址形式输出

本文介绍了一个C语言程序,用于将32位二进制数转换为IP地址格式。程序通过读取输入的二进制字符串,然后按8位划分并转换为十进制数,最后组合成IP地址输出。核心功能由自定义的bin_dec函数实现,该函数递归地将二进制数转换为十进制。

任意输入32位二进制数,编程实现将该二级制转换为IP地址形式。
例如:

输入:11111111111111111111111100000000
输出:255.255.255.0

这个例子是通过将输入的二进制数以8位数为一个单位分开,在通过自定义的函数将这8位二进制数转换成对应的十进制数。

#define  _CRT_SECURE_NO_WARNINGS  1
#include<stdio.h>
int bin_dec(int x, int n) 									/*自定义函数将二进制数转换成十进制数*/
{
	if (n == 0)
		/*递归结束条件*/
	{
		return 1;
	}
	return x * bin_dec(x, n - 1); 								/*递归调用bin_dec()函数*/
}
int main()
{
	int i;
	int ip[4] = { 0 };
	char a[33]; 											/*存放输入的二进制数*/
	printf("please input binary number:\n");
	scanf("%s", a); 										/*二进制数以字符串形式读入*/

	for (i = 0; i < 8; i++)
	{
		if (a[i] == '1')
		{
			ip[0] += bin_dec(2, 7 - i); 							/*计算0-7转换的结果*/
		}
	}
	for (i = 8; i < 16; i++)
	{
		if (a[i] == '1')
		{
			ip[1] += bin_dec(2, 15 - i); 						/*计算8-15转换的结果*/
		}
	}
	for (i = 16; i < 24; i++)
	{
		if (a[i] == '1')
		{
			ip[2] += bin_dec(2, 23 - i); 							/*计算16-23转换的结果*/
		}
	}
	for (i = 24; i < 32; i++)
	{
		if (a[i] == '1')
		{
			ip[3] += bin_dec(2, 31 - i); 							/*计算24-31转换的结果*/
		}
		if (a[i] == '\0')
		{
			break;
		}
	}
	printf("ip:\n");
	printf("%d.%d.%d.%d\n", ip[0], ip[1], ip[2], ip[3]);				/*将最终结果以ip形式输出*/
}

### IP地址的表示方法 #### IPv4地址的表示方法 IPv4地址由32位二进制数字组成,通常以点分十进制形式表示,即四个用圆点分割的十进制数,每个数范围为0到255。例如,`192.168.1.1` 是一个典型的IPv4地址[^1]。 此外,IPv4地址还可以通过分类的方式进一步描述其结构。传统的IPv4地址分为五类(A、B、C、D、E),每种类别的前缀用于区分网络部分和主机部分。然而,在实际应用中为了避免资源浪费,引入了子网掩码的概念,允许更加灵活地分配网络和主机部分[^4]。 #### IPv6地址的表示方法 IPv6地址由128位二进制数字构成,为了便于书写和阅读,采用冒号分隔的八组四位十六进制数表示。例如,`2001:0db8:85a3:0000:0000:8a2e:0370:7334` 是一个标准的IPv6地址[^3]。 在某些情况下,连续的零可以用双冒号 `::` 表示省略的部分,但双冒号在一个地址中只能出现一次。例如,上述地址可以简化为 `2001:db8:85a3::8a2e:370:7334`。 IPv6还支持嵌入IPv4地址形式,这种混合写法主要用于过渡阶段的技术实现。例如,`::ffff:192.168.1.1` 就是一个兼容IPv4IPv6地址--- ### 示例代码 以下是验证IPv4IPv6地址合法性的Python函数: ```python import ipaddress def validate_ip(ip_str): try: if ipaddress.ip_address(ip_str).version == 4: return f"{ip_str} is a valid IPv4 address." elif ipaddress.ip_address(ip_str).version == 6: return f"{ip_str} is a valid IPv6 address." except ValueError: return f"{ip_str} is not a valid IP address." print(validate_ip("192.168.1.1")) # 输出:192.168.1.1 is a valid IPv4 address. print(validate_ip("2001:0db8:85a3:0000:0000:8a2e:0370:7334")) # 输出:...valid IPv6... ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南山府嵌入式

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值