Forum: PC-Programmierung Parameter aus argv in unsigned char


von Vlen (Gast)


Lesenswert?

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.

von Peter C. (peter_c49)


Lesenswert?

#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?

von Dr. Sommer (Gast)


Lesenswert?

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
}

von Karl Käfer (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.