Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi MAC Adresse umwandeln (https://www.delphipraxis.net/115653-mac-adresse-umwandeln.html)

Luckie 15. Jun 2008 20:02


MAC Adresse umwandeln
 
Ich habe die MAC Adresse in einer PULONG Variablen vorliegen. Wie bekomme ich die jetzt in eine lesbare Form?

Das Beipiel im SDK macht es so:
Code:
hr = SendARP (ipAddr, 0, pulMac, &ulLen);
    printf ("Return %08x, length %8d\n", hr, ulLen);
   
    size_t i, j;
    char * szMac = new char[ulLen*3];
    PBYTE pbHexMac = (PBYTE) pulMac;

    //
    // Convert the binary MAC address into human-readable
    //
    for (i = 0, j = 0; i < ulLen - 1; ++i) {
        j += sprintf (szMac + j, "%02X:", pbHexMac[i]);
    }
   
    sprintf (szMac + j, "%02X", pbHexMac[i]);
    printf ("MAC address %s\n", szMac);
Aber leider reichen meine C-Kenntnisse nicht, um den Code nach Delphi zu übersetzen.

mkinzler 15. Jun 2008 20:05

Re: MAC Adresse umwandeln
 
sprintf() sollte man durch Format() ersetzen können

Luckie 15. Jun 2008 20:10

Re: MAC Adresse umwandeln
 
Das ist nicht das Problem. Das Problem ist die Schleife an sich und was davor und danach kommt.

mkinzler 15. Jun 2008 20:18

Re: MAC Adresse umwandeln
 
http://www.delphipraxis.net/internal...ct.php?t=76729

Luckie 15. Jun 2008 20:23

Re: MAC Adresse umwandeln
 
Hmpf, und ich dachte, ich mache mal was neues. :evil: Danke für den Link.

Olli 15. Jun 2008 23:22

Re: MAC Adresse umwandeln
 
Immernoch auf Kriegsfuß mit C/C++, Luckie?

Hier wird ein kleiner Trick benutzt, den du erst ab Tiburon auch in Delphi so benutzen kannst. Habe das lang und breit im JAPI-Blog erklärt und auch warum ich das Vorgehen von Borland fragwürdig finde.

Unter Delphi kannst du bisher im Prinzip nur PChar oder PAnsiChar zu diesem Zweck benutzen. PBYTE geht leider noch immer nicht. Was passiert ist, daß in der Zeile:
Code:
PBYTE pbHexMac = (PBYTE) pulMac;
der Pointer auf den ULONG in einen Pointer auf ein BYTE umgewandelt wird. Da BYTE und CHAR prinzipiell das gleiche sind (auf CPU-Ebene unter IA-32 und x64), und man in C/C++ einen Pointer auch als Array betrachten kann, geht die FOR-Schleife durch das Array und formatiert jeweils das Byte am Index i.

Luckie 16. Jun 2008 08:16

Re: MAC Adresse umwandeln
 
Das war das eine und das andere war die Schleife, in deren Kopf zwei Variablen deklariert werden, nämlich i und j. Das kannte ich auch noch nicht.

Olli 16. Jun 2008 11:37

Re: MAC Adresse umwandeln
 
Zitat:

Zitat von Luckie
Das war das eine und das andere war die Schleife, in deren Kopf zwei Variablen deklariert werden, nämlich i und j. Das kannte ich auch noch nicht.

Die sind dort nicht deklariert, denn das ist nicht erlaubt (jedenfalls nicht mehr als eine - eine ist in C99 und C++ erlaubt). Die werden da nur benutzt. Und das ist übrigens in allen drei mit Semikolon abgetrennten Teilen erlaubt. Man hätte genauso gut auch das machen können:

Code:
// ...
    PBYTE pbHexMac = (PBYTE) pulMac;

    // 
    // Convert the binary MAC address into human-readable
    // 
    for (i = 0, j = 0; i < ulLen - 1; ++i, ++pbHexMac) { 
        j += sprintf (szMac + j, "%02X:", *pbHexMac);
    }
// ...
... oder eben eine Variation davon.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:44 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz