Forum: PC-Programmierung Visual Studio Konsolenanwendung


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Entwickler (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
1 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.