在控制台上显示

时间:2010-11-25 06:55:27

标签: 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));

我得到的错误是错误:二进制&amp;

的操作数无效

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

2 个答案:

答案 0 :(得分:3)

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);

答案 1 :(得分:0)

如果您使用的是标准struct inet_addrstruct ether_addr,则可以使用标准功能。

printf("inet address: %s\n", inet_ntoa(…));
printf("ether address: %s\n", ether_ntoa(…));