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/