linux ip头结构体,C语言利用联合和结构体将IP地址进行打印及换行

在每一个计算机中都有他自己的IP地址,而IP地址是如何在计算机中存储的是一直以来我们都不知道的。

在计算机中,IP地址的存放是由10进制数组组成的,而计算机将IP地址呈现给我们时则是以点分十进制表示的。

例如  IP地址为 57.163.109.40  ,其实他在计算机中存储的是  678273849,而计算机就是利用这个十进制数字将IP地址以点分十进制进行表示,打印在我们的面前。

在联合体内部将十进制数字存储起来,得到的是一个占有四个字节的整形,而最终要将每个字节用点隔开将每个字节中的二进制数字打印出来,形成我们所看见的形式。在联合体中,存储一个int整型和四个char类型时,只开辟四个字节的空间,而这时int和char其实是公用这四个字节的空间,char就是int,int就是char,所以通过ji将一个数存进int类型后,再将这个数以char类型能拿来,这时拿出来的就是每个字节的数了,然后又以10进制进行打印,让IP地址呈现在我们眼前。

当然,打印出来的IP地址会存在大小端的问题,视情况而定。

#include

union Ip

{

unsigned int num;

struct

{

unsigned char c1;

unsigned char c2;

unsigned char c3;

unsigned char c4;

}ip;

};

int main()

{

union Ip my_ip;

my_ip.num = 678273849;

printf("%d.%d.%d.%d", my_ip.ip.c1, my_ip.ip.c2, my_ip.ip.c3, my_ip.ip.c4);

return 0;

}

如下图,没有换行

5a37fc8057dc704fba1109e7f4300d79.png

很多情况下,我们使用缩进是为了便于代码阅读,针对上述的字符串换行,我们可以采用另外的方式处理

加上\n

在printf("%d.%d.%d.%d\n", my_ip.ip.c1, my_ip.ip.c2, my_ip.ip.c3, my_ip.ip.c4);

#include

union Ip

{

unsigned int num;

struct

{

unsigned char c1;

unsigned char c2;

unsigned char c3;

unsigned char c4;

}ip;

};

int main()

{

union Ip my_ip;

my_ip.num = 678273849;

printf("%d.%d.%d.%d\n", my_ip.ip.c1, my_ip.ip.c2, my_ip.ip.c3, my_ip.ip.c4);

return 0;

}

如下图,换行

3d75be5fada113944eb7c276d2a3abcf.png

0b1331709591d260c1c78e86d0c51c18.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值