Falsche Ausgabe bei MAC funktion...
-
Im folgendem Code wird eine falsche Ausgabe ausgegeben:
string GetMACAddress(int adapternumber) { int nAdapterCount = 0; ULONG ip; ULONG buflen; PIP_ADAPTER_INFO pAdInfo = NULL; PIP_ADAPTER_INFO pAdInfo_c = NULL; buflen = 0; GetAdaptersInfo(pAdInfo, &buflen); //since buflen=0, buffer is // too small. function returns required buffersize in buflen. pAdInfo = (struct _IP_ADAPTER_INFO *)new UCHAR[buflen+1]; pAdInfo_c = pAdInfo; if (GetAdaptersInfo(pAdInfo, &buflen) == ERROR_SUCCESS) { do { ip = inet_addr(pAdInfo->IpAddressList.IpAddress.String); if ((ip != 0)&&(ip != 0x7f000001)) { nAdapterCount++; if ((nAdapterCount == adapternumber)||(adapternumber == 0)) { if (pAdInfo->AddressLength != 0) { string macstr; for (int i = 0; i < (int)pAdInfo->AddressLength; i++) { ostringstream fmt; fmt << " " << setbase(16) << setw(2) << setfill('0') << pAdInfo->Address[i]; string temp = fmt.str(); macstr += temp; } delete pAdInfo; return macstr; } } } } while ((pAdInfo->Next != NULL)&&((pAdInfo = pAdInfo->Next) != pAdInfo)); } delete pAdInfo_c; return ""; } int main() { cout << GetMACAddress(1) << endl; return 0; }
-
// Prints the MAC address stored in a 6 byte array to stdout static void PrintMACaddress(unsigned char MACData[]) { printf("MAC Address: %02X-%02X-%02X-%02X-%02X-%02X\n", MACData[0], MACData[1], MACData[2], MACData[3], MACData[4], MACData[5]); } // Fetches the MAC address and prints it static void GetMACaddress(void) { IP_ADAPTER_INFO AdapterInfo[16]; // Allocate information for up to 16 NICs DWORD dwBufLen = sizeof(AdapterInfo); // Save the memory size of buffer DWORD dwStatus = GetAdaptersInfo( // Call GetAdapterInfo AdapterInfo, // [out] buffer to receive data &dwBufLen); // [in] size of receive data buffer assert(dwStatus == ERROR_SUCCESS); // Verify return value is valid, no buffer overflow PIP_ADAPTER_INFO pAdapterInfo = AdapterInfo;// Contains pointer to current adapter info do { PrintMACaddress(pAdapterInfo->Address); // Print MAC address pAdapterInfo = pAdapterInfo->Next; // Progress through linked list } while(pAdapterInfo); // Terminate if last adapter }
-
Danke, aber ich möchte nur die MAC Adresse in einem String gespeichert haben damit ich später damit weiter arbeiten kann.
-
Wie wäre es wenn du den Fehler suchst und ihn dann verbesserst?
-
Ich glaube es liegt an dem:
ostringstream fmt; fmt << " " << setbase(16) << setw(2) << setfill('0') << pAdInfo->Address[i]; string temp = fmt.str();Doch ich bin mir nicht sicher, aber ich glaube es liegt an der Formatierung.
-
kernel64 schrieb:
Danke, aber ich möchte nur die MAC Adresse in einem String gespeichert haben damit ich später damit weiter arbeiten kann.
dann benutz' doch in der funktion 'PrintMACaddress' statt 'printf' ein 'sprintf'...
-
Also bei mir funktioniert as nicht

Hab den Code 1zu1 in MFC übernommen.