軟件大小:
軟件語言:
瀏覽人數:389人
軟件類型:
授權方式:
用戶評分:
更新時間: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地址了