Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » MAC Adressen in einen UCHAR casten?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
30.12.2009, 12:03 Uhr
~Hanniballer
Gast


hallo

ich möchte gere eine MAC-Adressen von einem char* in einen 6-Byte wert konvertieren. Ich möchte diesen wert später in eine arp-paket eintragen.

Nur mir gelingt es irgendwie nicht, den Wert in einen 6-Byte zu konvertieren, zur Laufzeit fliegt mir das Programm um die Ohren. Ich hab jetzt hier UCHAR gewählt, weil es ja eigentlich egal sein sollte was für ein Typ das Feld hat? Solange die Bytezahl stimmt, gibt der Typ ja nur eine Interpretation vor?! (meine mac-adressen sind an anderer stelle nämlich alle im UCHAR Format gespeichert, da geht das ohne probleme....)

Nur leider funktioniert das ganze nicht so wie ich mir das Vorstelle, das Programm fliegt mir immer mit Buffer-too-small um die Ohren. Aber irgendwie muss man einen MAC-STring doch in einen 6Byte Wert kriegen?


C++:
//Mac ist 00-FF-DA-38-6B-CF
UCHAR test[6];
sprintf_s((char*)test, 6, "%u", "00FFDA386BCF");



ich hab die größe von 6 gewählt, weil die MAC-Adresse in UCHAR Darstellung an andere Stelle in das Array hineinpasst. Nur ich komm irgendwie mit dem caste nicht klar - so gar nicht

kann mir da jemand helfen, wie ich meine MAC-Adresse als UCHAR Darstellung kriege?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
30.12.2009, 16:37 Uhr
0xdeadbeef
Gott
(Operator)


Am einfachsten wohl etwa so:

C++:
#include <stdio.h>

int main(void) {
  unsigned char test[6];

  if(6 == sscanf("00FFDA386BCF",
                 "%2x%2x%2x%2x%2x%2x",
                 &test[0],
                 &test[1],
                 &test[2],
                 &test[3],
                 &test[4],
                 &test[5])) {
    printf("%02x:%02x:%02x:%02x:%02x:%02x:",
           test[0],
           test[1],
           test[2],
           test[3],
           test[4],
           test[5]);
    puts("");
  }

  return 0;
}


Und lass diesen sprintf_s-Blödsinn, dafür gibt es im Standard schon snprintf, strncpy und so weiter. Die _s-Funktionen kriegst du auf keinem anderen System als Windows überhaupt kompiliert.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 30.12.2009 um 16:39 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: