c - 在控制台上显示

标签 c

printf(" Src Address\n");
for(i = 0;i < 4;i++)
    printf(" %d ",((ip->ip_src.s_addr)&(0x0FF<<(i*8)))>>(i*8));

这显示 o/p 为 127.0.0.0,因为我正在使用环回,但是当我使用相同的方式执行相同的 2 显示以太网地址时

for(i = 0;i <6; i++)
    printf("dest ether:%c",((ethernet->ether_dhost)&(0x0FF<<(i*8)))>>(i*8));

我得到的错误是 error: invalid operands to binary &

这里 u_char ether_dhost[6];并且存储 ip 地址的变量是 unsigned long int 类型...如何显示以太网地址..

最佳答案

s_addr 字段是一个 32 位整数,用于存储 IPv4 地址。使用二进制 & 运算符可以正常工作。 ether_dhost 字段 OTOH 是一个 6 字节数组,您不能像操作 s_addr 那样操作它。但话又说回来,您不必:

for(i = 0; i < 6; i++)
    printf(":%c"+!i, ethernet->ether_dhost[i]);

顺便说一下,您的 IP 地址代码比需要的复杂得多:

for(i = 0; i < 32; i += 8)
    printf(".%d"+!i, (ip->ip_src.s_addr>>i)&0xff);

关于c - 在控制台上显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4274444/

相关文章:

c - 如何从 Linux 获取窗口大小

c++ - 在 C++/C 中通过引用传递

c++ - 在不同处理器之间共享内存时需要哪些东西?

c - 根据语言语义制作外部语句的 "else if"部分?

c - printf 变量占位符?这还是一件事吗?

C中变量的声明和定义之间的混淆

python - 用使用静态全局变量的 SWIG 包装 C 代码

c - 更改configure.ac后如何重建openssh 5.2p1

c - 为什么这个数组脚本不能打印正确的结果?

c - 在处理并列情况的同时在矩阵中找到最大值 [在 C 中]