Softwareentwicklung
›
Thread
Parameter aus argv in unsigned char
V
Vlen
Gast
15.06.2015 17:06
#4166111
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?
DS
Dr. Sommer
Gast
15.06.2015 18:06
#4166169
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 }
KK
Karl Käfer
Gast
15.06.2015 19:53
#4166299
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
↑ Nach oben
← Zurück zu Softwareentwicklung
Antwort schreiben