struct ethernet_header
{
    u_char ether_dhost[ ETHER_ADDR_LEN];

    u_char ether_shost[ETHER_ADDR_LEN];

    u_short ether_type;
};

for(i = 0;i <6; i++)
  printf("dest ether:%x",ethernet->ether_dhost);

如何以正确的可读形式打印以太网地址,每个字节后都有空格我得到的订单是十六进制的。这里,以太网是指向结构ethernet_header的指针。

最佳答案

应该是这样的:

char mac[6 * 2 + 5 + 1];

for(size_t i = 0, pos = 0; i < sizeof ethernet->ether_dhost; i++)
{
  if(i > 0)
   mac[pos++] = ':';
  sprintf(mac + pos, "%02x", (unsigned int) ethernet->ether_dhost[i] & 0xffu);
}

这也会在每个字节之间插入冒号,因此输出看起来像DE:AD:BE:EF:BA:BE这是以太网的MAC地址通常的格式。

关于c - 将以太网地址转换为可读形式?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4265016/

10-11 19:34