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了


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

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值