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