Hilfe bei MAC-Adresse...

partitionist

Erfahrenes Mitglied
Hallo Leute, ich habe folgenden Code zum Auslesen der MAC Adresse gefunden:

Code:
// 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 
}

Ich möchte gerne das die Funktion GetMACaddress(void) als Rückgabewert ein String hat, also statt der static void ein string GetMACaddress(void). Die Funktion soll nur die MAC Adresse zurückgeben, doch wie sieht dann in der Funktion das zusammensetzen zu einem String aus, also mit der HEX Formatierung?
 
partitionist hat gesagt.:
Hallo Leute, ich habe folgenden Code zum Auslesen der MAC Adresse gefunden:

Code:
// 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 
}

Ich möchte gerne das die Funktion GetMACaddress(void) als Rückgabewert ein String hat, also statt der static void ein string GetMACaddress(void). Die Funktion soll nur die MAC Adresse zurückgeben, doch wie sieht dann in der Funktion das zusammensetzen zu einem String aus, also mit der HEX Formatierung?

die Funktion sprintf wird verwendet, um Daten zu formatieren und in einer Zeichenkette abzulegen. Im Prinzip handelt es sich um eine Variante von printf und verwendet die gleichen Escape- und Formatierungszeichen.

damit musst du blos die erste Funktion garnieren (statt dem printf) und das Ergebnis zurückgeben.
 
Das mit sprintf() hab ich ein wenig verstanden, jedoch möchte ich in der main() die MAC Adresse in ein string speichern, da kann ich ja nicht die erste Funktion verwenden da sie ja Parameter erwartet.

So will ich die Funktion aufrufen und dann in ein string speichern.
Code:
int main()
{
string MAC = GetMACadress();
}

In der GetMACadress() Funktion müsste dann der string mit der Adresse zurückgegeben werden. Ich weiß z.B. nicht wie man das pAdapterInfo->Address in ein string speichern kann und dann noch in HEX?
 
Habe folgendes in der Schleife ergänzt:

Code:
do 
    {        
        sprintf(buffer, "%02X-%02X-%02X-%02X-%02X-%02X\n", pAdapterInfo->Address);
        //PrintMACaddress(pAdapterInfo->Address);    // Print MAC address
        pAdapterInfo = pAdapterInfo->Next;        // Progress through linked list
    }
    while(pAdapterInfo);

Doch damit kriege ich nicht die MAC adresse sondern andere Zahlen.
Bitte dringend um Hilfe
 
Du gibst sechs Ausgaben an, aber nur einen Parameter:

sprintf(buffer, "%02X-%02X-%02X-%02X-%02X-%02X\n", pAdapterInfo->Address);

Der indirekte Aufruf im Original-Code hat dir ein Array von sechs Bytes übergeben, die musst du auch wieder einzeln ausgeben:

sprintf( buffer, "%02X-%02X-%02X-%02X-%02X-%02X\n", pAdapterInfo->Address[0], pAdapterInfo->Address[1], pAdapterInfo->Address[2], pAdapterInfo->Address[3], pAdapterInfo->Address[4], pAdapterInfo->Address[5] );
 
Endurion hat gesagt.:
Der indirekte Aufruf im Original-Code hat dir ein Array von sechs Bytes übergeben, die musst du auch wieder einzeln ausgeben:

sprintf( buffer, "%02X-%02X-%02X-%02X-%02X-%02X\n", pAdapterInfo->Address[0], pAdapterInfo->Address[1], pAdapterInfo->Address[2], pAdapterInfo->Address[3], pAdapterInfo->Address[4], pAdapterInfo->Address[5] );

Das würde aber nur eine Zeichenkette ergeben, die dann in buffer steht.

Wie ist das denn wenn man die Hex werte in einem Array speichern will?

Ich dachte an sowas wie das hier in der Richtung:

nic_hex[0]=printf("0x%02X"),pAdapterInfo->Address[0];

Aber für z.B. 00 steht dann wirklich 0x00 im Array, ich wollte aber den Hexwert drin haben, der nach Ausgabe mit printf("%X",nic_hex) etc. wieder 00 anzeigt.
 
Zurück