C语言 巧用指针类型不匹配

这张图片是我之前博客说的大小端对齐,用此来查看数据在内存的显示。


如果我们使用char 的指针来指向 int 类型

int a = 0x12345678;
char *p1 = (char *)&a;
printf("%x\n", *p1);
printf("%x\n", *(p1 + 1));
printf("%x\n", *(p1 + 2));
printf("%x\n", *(p1 + 3));

输出的结果,是不是很神奇,使用char指针把int类型给分开了

下面我画了一张图来解释这个现象


char 指针每次加1  移动一个字节,正好把int 整分为了4份


这样我们用这个来操作一些有意思的事情了。。。

比如,电脑之间传ip 类似于  192.168.1.1  正好四份,那么是不是可以用一个int类型来存ip地址

让我们试一下

void EnCode(int &code,IP &ip)
{
	unsigned char *p1 = (unsigned char *)&code;
	*p1 = ip.one;
	*(p1 + 1) = ip.two;
	*(p1 + 2) = ip.three;
	*(p1 + 3) = ip.four;
}

void DeCode(int &code)
{
	unsigned char *p = (unsigned char *)&code;
	printf("%d.%d.%d.%d\n", *p, *(p + 1), *(p + 2), *(p + 3));
}

int main()
{
	int code = 0;
	IP ip(192, 168, 1, 1);
	EnCode(code, ip);
	DeCode(code);
	return 0;
}
这样就可以使用一个int 来传输 ip了


如果有不懂或者建议可以留言

猜你喜欢

转载自blog.csdn.net/qq_33413868/article/details/80762365