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:
Aber leider reichen meine C-Kenntnisse nicht, um den Code nach Delphi zu übersetzen.
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); |
Re: MAC Adresse umwandeln
sprintf() sollte man durch Format() ersetzen können
|
Re: MAC Adresse umwandeln
Das ist nicht das Problem. Das Problem ist die Schleife an sich und was davor und danach kommt.
|
Re: MAC Adresse umwandeln
|
Re: MAC Adresse umwandeln
Hmpf, und ich dachte, ich mache mal was neues. :evil: Danke für den Link.
|
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:
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.
PBYTE pbHexMac = (PBYTE) pulMac;
|
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.
|
Re: MAC Adresse umwandeln
Zitat:
Code:
... oder eben eine Variation davon.
// ...
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); } // ... |
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