printf(" Dst Address:\n");
for(i = 0;i < 4;i++)
printf(" %d ",((ip->ip_dst.s_addr)&(0x0FF<<(i*8)))>>(i*8));
这样我就可以将目标 IP 地址打印为 192.28.2.11,但我只想得到前两个数字 192 和 28 我怎样才能获得这两个值。?
最佳答案
仅修改您的代码有什么问题:
int a[4];
for (i = 0; i < 4; i++)
a[i] = ((ip->ip_dst.s_addr)&(0x0FF<<(i*8)))>>(i*8);
这应该在 a[0]
和 a[1]
中为您提供它们。
以下代码显示了一种方法。由于 x86 小端格式,IP 地址被反转 (0x0b0280c0
):
#include <stdio.h>
int main (void) {
int i;
unsigned int addr = 0x0b0280c0;
int a[4];
for (i = 0; i < 4; i++)
a[i] = ((addr)&(0x0FF<<(i*8)))>>(i*8);
printf ("%d %d %d %d\n", a[0], a[1], a[2], a[3]);
return 0;
}
它输出:
192 128 2 11
您可以看到组件被放置在各个数组元素中。
关于收集值并将其存储在单独的变量中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4677779/