Forum: PC-Programmierung Visual Studio Konsolenanwendung


von Entwickler (Gast)


Lesenswert?

Guten Morgen,

in einer Konsolenanwendung wird als Übergabeparamter die MAC-Adresse 
verlangt. In der ersten Version wurde der vorkompilierte Header 
verwendet. Nun istr es so dass ich den vorkompilierten Header 
deaktivieren musste. Allerdings funktioniert das mit der MAC-Adress 
Einagbe und der Konvertierung in Bytes nicht mehr. Woran könnte dies 
liegen???

Eingabe: 00:12:23:45:55:00

1
uint8_t  MacAddr[6];
2
3
int main(int argc, char* argv[])
4
{
5
6
strncpy((char*)MacAddr, argv[1], 17);
7
uint8_t mac_addr[6];
8
9
sscanf((char*)MacAddress, "%02:%02:%02:%02:%02:%02", &mac_addr[0], &mac_addr[1], &mac_addr[2], &mac_addr[3], &mac_addr[4], &mac_addr[5]);
10
11
        printf("> MAC-Adresse\t\t\t\t\t= %02:%02:%02X:%02:%02:%02\n", mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5]);
12
}

von Entwickler (Gast)


Lesenswert?

Korrektur:
1
uint8_t  MacAddr[6];
2
3
int main(int argc, char* argv[])
4
{
5
6
  strncpy((char*)MacAddr, argv[1], 17);
7
  uint8_t mac_addr[6];
8
9
  sscanf((char*)MacAddr, "%02:%02:%02:%02:%02:%02", &mac_addr[0],
10
  &mac_addr[1], &mac_addr[2], &mac_addr[3], &mac_addr[4], &mac_addr[5]);
11
12
  printf("> MAC-Adresse\t\t\t\t\t= %02:%02:%02X:%02:%02:%02\n", 
13
  mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], 
14
  mac_addr[5]);
15
}

von Marius W. (mw1987)


Lesenswert?

1
uint8_t  MacAddr[6];
...
1
strncpy((char*)MacAddr, argv[1], 17);


Da hast du mal richtig was verhauen. Erstens fragst du nicht ab, ob 
argv[1] überhaupt valide ist (argc > 1!) und außerdem kopierst du einen 
String der länger ist in einen viel zu kleinen Buffer!

Außerdem besteht eine MAC-Adresse aus Hex-Zahlen, das heißt der 
Format-String müsste jeweils '%02x' sein, wenn ich das jetzt richtig 
sehe.

Gruß
Marius

: Bearbeitet durch User
von Entwickler (Gast)


Lesenswert?

Ok das stimmt.

Ich habs nun hinbekommen:
1
        std::stringstream ss((char*)MacAddress);
2
        char trash;
3
4
        for (int i = 0; i < 6; i++)
5
        {
6
          int foo;
7
          ss >> std::hex >> foo >> trash;
8
          mac_addr[i] = foo;
9
        }

von PittyJ (Gast)


Lesenswert?

Copy und Paste sind manchmal richtig magisch.
Man hat zwar keine Ahnung, warum es geht, freut sich aber wie ein 
Schneekönig, dass es geht.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.