例如,我的MAC地址的值为"0:22:3f:a:5d:16",我如何将其转换为人类可读的格式,如"00:22:3f:0a:5d:16" ?因为我使用,我的mac地址缺少前导零
string asd = ether_ntoa ((struct ether_addr *)p->add2);//p->add2 is a unsigned char[6]
Run Code Online (Sandbox Code Playgroud)
ether_nota删除前导零,我不知道是否有其他方法将正确的MAC地址存储为字符串.
该执行,导致它没有零填充打印只是printf他们使用%x的不是%02x.该struct ether_addr格式记录在手册页中,因此其内部结构不是私有的.
The structure ether_addr is defined in <net/ethernet.h> as:
struct ether_addr {
uint8_t ether_addr_octet[6];
}
Run Code Online (Sandbox Code Playgroud)
所以说,我会实现自己的版本. 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;
}
Run Code Online (Sandbox Code Playgroud)
非重入版本只有一个静态缓冲区并调用可重入的缓冲区.
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);
}
Run Code Online (Sandbox Code Playgroud)
如果你想看一下glibc中函数的实现,你可以在搜索时找到它.
| 归档时间: |
|
| 查看次数: |
1771 次 |
| 最近记录: |