这张图片是我之前博客说的大小端对齐,用此来查看数据在内存的显示。
如果我们使用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了如果有不懂或者建议可以留言