上个月牛客的排名出来了,附上截图一张。
还是小有成就感的,但是没想到竟然这么能内卷,才排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!