软件大小:
软件语言:
浏览人数:354人
软件类型:
授权方式:
用户评分:
更新时间:2022-12-25
软件分类:Mac系统
运行环境:
这几天需要用到的一个功能就是读取机器的Mac地址。
一般一台主机上可能有多个网卡w8系统mac地址查询,也可能有多个网卡,每个网卡可能对应多个IP地址。 但是每张网卡只有一个MAC地址。
那么我们如何获取本机的Mac地址呢?
获取当前电脑下的所有IP和Mac地址
那么,来实现吧~
下面的代码是纯C++的,可以嵌套在任何框架中。 我也比较喜欢写一些干净的代码,哈哈~
获取当前电脑下的所有IP和对应的MAC地址
//头文件
#include
#include
//具体实现
{
//TODO:获取本机的MAC地址
std::string sMac = "";
PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();
//得到结构体大小,用于GetAdaptersInfo参数
unsigned long stSize = sizeof(IP_ADAPTER_INFO);
//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;
//其中stSize参数既是一个输入量也是一个输出量
int nRel = GetAdaptersInfo(pIpAdapterInfo, &stSize);
if (ERROR_BUFFER_OVERFLOW == nRel)
{
//如果函数返回的是ERROR_BUFFER_OVERFLOW
//则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小
//这也是说明为什么stSize既是一个输入量也是一个输出量
//释放原来的内存空间
delete pIpAdapterInfo;
//重新申请内存空间用来存储所有网卡信息
pIpAdapterInfo = (PIP_ADAPTER_INFO) new BYTE[stSize];
//再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量
nRel = GetAdaptersInfo(pIpAdapterInfo, &stSize);
}
if (ERROR_SUCCESS == nRel)
{
//每个网卡对应一个链表节点
while (pIpAdapterInfo)
{
for (int i = 0; i < pIpAdapterInfo->AddressLength; i++)
{
int nAddress = (int)pIpAdapterInfo->Address[i];
char buf[5];
if (i < pIpAdapterInfo->AddressLength - 1)
{
sprintf(buf, "X-", nAddress);
}
else
{
sprintf(buf, "X", nAddress);
}
sMac += buf;
}
pIpAdapterInfo = pIpAdapterInfo->Next;
}
}
//释放内存
if (pIpAdapterInfo)
{
delete pIpAdapterInfo;
}
return sMac;
}
代码分析:
在上面的代码中,最重要的是如何将我们获取到的MAC地址转换成字符串格式。
我认为很多博客只是输出它,并没有真正告诉我们如何组织数据。
在上面的代码中不难发现w8系统mac地址查询,我是通过while循环逐一获取电脑上的Mac地址信息w8系统mac地址查询,这样就可以取出每张网卡对应的MAC地址了