implementation导致它打印没有零填充只是printf
他们使用%x
而不是%02x
。 struct ether_addr
格式是documented in the man page,因此它的内部不是私有的。
The structure ether_addr is defined in <net/ethernet.h> as:
struct ether_addr {
uint8_t ether_addr_octet[6];
}
所以说,我会实现我自己的版本。这里的rz
表示可重入和零填充。
char *ether_ntoa_rz(const struct ether_addr *addr, char *buf)
{
sprintf(buf, "%02x:%02x:%02x:%02x:%02x:%02x",
addr->ether_addr_octet[0], addr->ether_addr_octet[1],
addr->ether_addr_octet[2], addr->ether_addr_octet[3],
addr->ether_addr_octet[4], addr->ether_addr_octet[5]);
return buf;
}
不可重入版本将只有一个静态缓冲区并调用可重入的版本。
char *ether_ntoa_z(const struct ether_addr *addr)
{
static char buf[18]; /* 12 digits + 5 colons + null terminator */
return ether_ntoa_rz(addr, buf);
}
如果你想看看函数的实现中的glibc,你可以find it if you search。
我想你可以通过选入ether_addr成员来单独打印MAC地址的每个字节。 – 2011-01-19 15:06:08