我又来更新了,今天好好聊一聊强制转换!

上个月牛客的排名出来了,附上截图一张。

 还是小有成就感的,但是没想到竟然这么能内卷,才排15.

        废话不多说了,直接上正文。在上个月的学习中,对于多进程操作中,我最感兴趣里面的套接字交流了,它可以实现不同主机之间的信号通讯,而在里面的编程中有这样几行代码:

struct sockaddr_in myAddr;
myAddr.sin_family = AF_INET;
myAddr.sin_port = htons(666);
myAddr.sin_addr.s_addr = htonl(INADDR_ANY);
bind(socket,(struct sockaddr*)&myAddr,sizeof(myAddr));

在这个里面就出现了强制转换,我就很好奇这个知识点。于是搜集资料取得了一些成果。

那么看下面这段代码:

#include<stdio.h>
int main(){
    int a = 11111;
    printf("%c\n",(char)a);
    return 0;
}

这个结果是g。

我们来分析一下为什么会产生这个结果,g的ASCII码值是103,转换成8位二进制数为

                  0110 0111

我们再来看一下a对应的11111转换成二进制数是多少

0010 1011 0110 0111

有没有发现什么?没错进行强制转换之后,对应的结果是对应的是原来数据的低8位。由于我的虚拟机是小端方式,所以对应的是低八位。我们下面可以将这个知识点拓展一下,进行一下结构体之间的强制转换。

typedef struct{
    int a;
    char b;
}s1_t;
typedef struct{
    char a;
    int b;
}s2_t;

当我们对这两个结构体生成的对象之间进行强制转换的时候,

对应字节的位置进行强制转换,这个在网络通讯方面有的非常的多,希望各位能有所收获,那么我们下次再见了,886!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值