Parameter aus argv in unsigned char

Gast #4166111
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.
#4166160
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?
Gast #4166169
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
}
Gast #4166299
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

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.