收集值并将其存储在单独的变量中

标签 c

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/

相关文章:

c - 当给变量赋值以及从标准输入扫描它时,内部会发生什么?

c - 如何在纯C中将字符放入字符串的空指针中

c - 再次使用 mmap() ,重新使用以前的 mmap() 结果失败 - 使原始 ptr 无效?

无法在结构数组中正确追加元素

c++ - 在 Windows 上使用 C/C++ 检查 VPN 的连接性

C char** 数组仅存储最后最近分配的字符串

c - 如何在 C 中替换 txt 文件中间的一行?

c - C 语言上的二叉树实现

c - 命名信号量只是不工作

c - 如何从 C 语言的 pcap 获取网络层和传输层协议(protocol)?