String nach ASCII konvertieren



  • Wie kann ich ich ein Zeichen in ASCII-Code umwandeln?

    Ich will z.B: Das Zeichen "a" in den ASCII-Zahl "64" umwandeln mit 2 Addieren und wieder in ein Zeichen (String) umwandeln.

    Mit StrToInt() meckert Borland immer sobald er ein Zeichen bekommt und keine ZeichenZahl.



  • Hallo

    expliziert in int umwandlen

    char zeichen = 'a';
    int ascii = int(zeichen);
    zeichen = char(zeichen +2);
    

    bis bald
    akari



  • besten Dank!



  • Und wie funktioniert das wenn ich eine Zeichenkette (AnsiString) habe?
    Wie kann ich die einzenlen Zeichen umwandeln und später wieder einfügen?



  • Hallo,

    wenn du einen AnsiString hast, kannst du diesen wie ein Array behandeln.

    beispiel:

    AnsiString zeichen = 'Hallo';
    char zeichen1 = zeichen[1];
    char zeichen2 = zeichen[2];
    char zeichen3 = zeichen[3];
    char zeichen4 = zeichen[4];
    char zeichen5 = zeichen[5];
    
    int ascii1 = int(zeichen1);
    inr ascii2 = int(zeichen2);
    .
    .
    .
    
    zeichen1 = char(zeichen1 + 2);
    zeichen2 = char(zeichen2 + 2);
    .
    .
    .
    
    zeichen = zeichen1 + zeichen2 + zeichen3 + zeichen4 + zeichen5;
    

    Das ist jetzt die ausführliche behandlung der strings, es geht sicher kürzer zusammengefasst, hier nur ausführlich erklärt, damit du verstehst was dahinter steckt.

    Gruß
    MWJK



  • @MWJK: Erstens schreibt man String-Literale in doppelten Anführungszeichen ". Und zweitens: Warum so umständlich? Das kann man doch auch in einer Schleife und ohne Zwischenvariable lösen:

    std::string text = "Hallo";
    for(int i=0;i<text.length();++i)
      text[i]+=2;
    


  • Hallo, ich schreibe gerade ein kleines Verschlüsselungsprogramm. In Delphi, hat das Prinzip geklappt, doch in C++ (Turbo) kommt mir einen Zugriffverletzung entgegengesprungen:

    AnsiString Code(AnsiString keyword, AnsiString text)
    {
      int i, pos, key;
      AnsiString dummy;
      pos = 0;
      for (i=0; text.Length(); i++) {
    	if (pos = keyword.Length())
    	  {
    	  pos = 0;
    	  }
    	else
    	  {
    	  pos += 1;
    	  }
      key = int(text[i]) + int(keyword[pos]);
      dummy += char(key);
      }
      return dummy;
    }
    

    Der Fehler liegt bei "int()", aber wenn ich gearde richtig gelesen habe, müsste es doch eigentlich klappen - kann mir jemand helfen ?



  • akari schrieb:

    zeichen = char(zeichen +2);

    Ich frag mal in die Runde, warum "+2"? Geht was beim konvertieren nach Integer verloren? Wenn ja was? Reine Neugier. 😉



  • AnsiString Code(AnsiString keyword, AnsiString text)
    {
      int i, pos, key;
      AnsiString dummy;
      pos = 0;
      for (i=0; i<text.Length(); i++)
    {
    	if (pos == keyword.Length())
    	  {
    	  pos = 0;
    	  }
    	else
    	  {
    	  pos++;
    	  }
      key = StrToInt(text[i]) + StrToInt(keyword[pos]);
      dummy = dammy + char(key); // Hier vielleicht das char(key+2) von akari verwenden?
      }
      return dummy;
    }
    

    Merke

    Pascal = ist in C++ ==
    und := ist = in C++

    Der for fehlte auch die Bedingung i<text.Length()



  • Hallo

    Integerman schrieb:

    akari schrieb:

    zeichen = char(zeichen +2);

    Ich frag mal in die Runde, warum "+2"? Geht was beim konvertieren nach Integer verloren? Wenn ja was? Reine Neugier. 😉

    Nein es geht natürlich nichts verloren. Das +2 ergibt sich aus der Fragestellung von Morgleh.

    bis bald
    akari



  • Hallo,
    vielen Dank! Das mit == und i< muss ich wohl vergessen haben - leider kommt immernoch eine zugrffsverweigerung, gehe ich auf anhalten wird mir die Funktion von int() in strings.h geoeffnet - muss ich noch etwas anderes einbinden oder woran könnte der fehler noch liegen ?



  • Hallo, danke erst mal, leider immer noch nicht alles perfekt - das StrToInt bringt mir nichts, dann müsste ja Edit1.Text eine Zahl beinhalten - ich möchte die Ordinalzahl (in Delphi ord()) ?



  • AnsiString Code(const AnsiString& keyword, AnsiString text)
    {
      for (int i=1;i<=text.Length();i++)text[i]+=keyword[(i-1)%keyword.Length()+1];
      return text;
    }
    

    Ist das, was du erreichen wolltest?
    Du brauchst übrigens kein ord() oder dergleichen, text[i] gibt dir ein char, mit dem du auch rechnen kannst.

    Edit: deine Zugriffsverletzung könnte daher kommen, dass die Indexierung bei AnsiStrings bei 1 beginnt, du aber versuchst auf text[0] zuzugreifen.



  • Vielen, Vielen Dank an Nanyuki. Bie Pascal bzw. Delphi geht der Index immer bei 0 los - Problem geklärt.

    Ist wirklich en tolles Forum!!!



  • Bei VCL(C++Builder) geht im Allgemeinen der Index auch bei 0 los, nur bei AnsiString nicht! 😉



  • Ich habe die folgende Aufgabestellung : Entwickeln Sie ein Programm in C++, das vier beliebige Zeichen von der Tastatur einliest und anschließend die Dezimalwerte des ASCII- Codes der vier Zeichen auf dem Bildschirm ausgibt.

    Beispiel: a=97, 5=53, %=37, ?=63



  • danke im voraus



  • und was genau ist nun das Problem?

    Falls du möchtest, daß dir das jemand programmiert: frag mal im Projekteforum, gegen einen entsprechenden Obulus wird sich da bestimmt jemand finden.

    Alternativ und kostengünstiger ist natürlich Eigeninitiative.



  • Hallo Jungens,

    wießt ihr wie man diese ASCIII Codes andersrum schreiben kann?

    z.b.

    #include<stdio.h>
    #include<string.h>
    
    int main()
    {
    char Zeile [81];
    int Zahl;
    
    printf("Bitte geben sie einen Satz ein: ");
    gets (Zeile);
    
    printf("\n");
    Zahl = strlen(Zeile);
    
    for (int i = 0; i < strlen(Zeile); i++)
    {
     printf("%i ",Zeile[i]*Zahl);
    }
    printf("\n\n");
    
    return 0;
    }
    


  • Hallo,

    Es wäre wohl vernünftig dafür einen neuen Thread aufzumachen. Deinen Code nach zu urteilen auch eher im ANSI-C Forum. Dein Code ist kein C++.
    Willst du also C oder C++?


Anmelden zum Antworten