Guten Tag, ich möchte mir gerne ein kleines Konsolenprogramm schreiben, dem ich beispielsweise zum Start zwei Argumente übergebe. argv[0] = Programmname argv[1] = 9876543210 // nur als Beispiel (min.10Zeichen) argv[2] = ffab01aaab // nur als Beispiel (min. 5 Byte) diese Werte möchte ich nun gerne in einem unsigned char Array abspeichern. unsigned char Array2[0xff,0xab,0x01 ....]; unsigned char Array1[0x09,0x08,0x07 ....]; Habt ihr eine Idee, wie ich das am einfachsten lösen kann ? Habe es schon mit ein paar Standardfunktionen versucht ( atoi, strtol usw.), war aber nicht sehr erfolgreich. Vielen Dank für Hinweise.
#include <stdio.h> #include <stdlib.h> #include <string.h> int main( int argc, char** argv) { int i; if( argc < 3) { puts("help! not enough parameters\n"); exit(1); } for(i=0; i<argc; i++) { printf("argument %d: %s length: %d\n", i , argv[i], (int)strlen(argv[i])); } for(i=0; i<strlen(argv[1]);i++) // show each char in argument 1 putchar(argv[1][i]); putchar('\n'); return 0; } $ ./Vlen eins1 zwei22 drei333 argument 0: ./Vlen length: 6 argument 1: eins1 length: 5 argument 2: zwei22 length: 6 argument 3: drei333 length: 7 eins1 du weisst schon das alles schon da ist was du möchtest?
1 | #include <vector> |
2 | #include <string> |
3 | #include <cstddef> |
4 | #include <iostream> |
5 | #include <iterator> |
6 | |
7 | |
8 | int main (int argc, char* argv []) { |
9 | // Speichere die Argumente in einem Vektor, was einfacher zu verwenden ist
|
10 | std::vector<std::string> args (argv, argv+argc); |
11 | |
12 | if (args.size () >= 3) { |
13 | // Lege die Arrays als Vektoren an (sicherer)
|
14 | std::vector <unsigned char> Array1 (args [1].size ()); |
15 | std::vector <unsigned char> Array2 (args [2].size () / 2); |
16 | |
17 | // Dezimalzahlen umwandeln
|
18 | for (size_t i = 0; i < args [1].size (); ++i) |
19 | Array1 [i] = args [1][i] - '0'; |
20 | |
21 | // Hexa-Zahlen-Paare umwandeln
|
22 | for (size_t i = 0; i < args [2].size () / 2; ++i) |
23 | Array2[i] = std::stoi (args[2].substr (2*i, 2), 0, 16); |
24 | |
25 | // Test Ausgabe
|
26 | std::copy (Array1.begin (), Array1.end (), std::ostream_iterator<int> (std::cout, " ")); |
27 | std::cout << std::hex; |
28 | std::copy (Array2.begin (), Array2.end (), std::ostream_iterator<int> (std::cout, " ")); |
29 | }
|
30 | }
|
Hallo,
1 | #include <iostream> |
2 | #include <string> |
3 | #include <boost/program_options.hpp> |
4 | |
5 | int main(int argc, char* argv[]) { |
6 | namespace po = boost::program_options; |
7 | |
8 | std::string arg1; |
9 | std::string arg2; |
10 | |
11 | po::options_description desc("Options"); |
12 | desc.add_options() |
13 | ("arg1", po::value<std::string>(&arg1)->required(), "arg1 (mandatory)") |
14 | ("arg2", po::value<std::string>(&arg2)->required(), "arg2 (mandatory)") |
15 | ;
|
16 | |
17 | po::positional_options_description posi; |
18 | posi.add("arg1", 1); |
19 | posi.add("arg2", 1); |
20 | |
21 | po::variables_map vm; |
22 | po::store(po::command_line_parser(argc, argv).options(desc).positional(posi).run(), vm); |
23 | po::notify(vm); |
24 | |
25 | std::cout << "arg1: " << arg1 << ", arg2: " << arg2 << std::endl; |
26 | |
27 | return 0; |
28 | }
|
HTH, Karl
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.