zahl 72838128 in ASCII ausgabe umwandeln?



  • abend,

    gibt es eine einfache möglichkeit, eine zahl wie 72838128 im editfeld, als ascii ausgeben zu lassen?

    wünsche noch was



  • Hallo

    Was verstehst du unter ASCII? Wenn du IntToStr benutzt werden auch ASCII-Zeichen draus 🙄

    bis bald
    akari



  • hallo akari,

    also ich erzeuge mit der rand() routine eine zufällige zahl und diese würde ich gerne komplet als ascii mwandeln lassen.

    daß wenn die ersten 2 ziffern 33 haben, ein ! ausgegeben wird, oder 48 dann 0.

    das ganze soll ein passwort generator werden, dachte das were der einfachste richtige weg!?
    🙄

    gibts da eine einfache verständliche nachvolziebare möglichkeit, für so einen c++ deppen wie mich?



  • Erzeuge (per Schleife) für jedes Zeichen des Passwortes eine Zufallszahl aus dem Wertebereich der (druckbaren) ASCII-Zeichen.



  • Also an deiner Stelle würde ich eh sowas eher machen.

    int x = (rand()%255);
    char c = (char)x;
    

    Anstatt Werte bis 10000000 zu benutzen.



  • Hallo

    Damit bekommst du aber Passwörter mit zum Beispiel dem ASCII-Code für Backspace drin. Also wie Jansen gesagt hat : darauf achten nur druckbare Zeichen zu ermitteln. Zum Beispiel so

    const AnsiString Zeichen = "abc...ABC...123...#%&..."; // Alle druckbaren gewünschten Zeichen einmal hiereinsetzen
    char c = Zeichen[rand()%Zeichen.Length()];
    

    bis bald
    akari



  • habs auf die art versucht

    const AnsiString Zeichena = "abcdefghjkmnopqrstuvwxyzABCDEFGHJKMNOPQRSTUVWXYZ1234567890#!&"; // Alle druckbaren gewünschten Zeichen einmal hiereinsetzen
    char a = Zeichena[rand()%Zeichena.Length()];
    const AnsiString Zeichenb = "abcdefghjkmnopqrstuvwxyzABCDEFGHJKMNOPQRSTUVWXYZ1234567890#!&"; // Alle druckbaren gewünschten Zeichen einmal hiereinsetzen
    char b = Zeichenb[rand()%Zeichenb.Length()];
    const AnsiString Zeichenc = "abcdefghjkmnopqrstuvwxyzABCDEFGHJKMNOPQRSTUVWXYZ1234567890#!&"; // Alle druckbaren gewünschten Zeichen einmal hiereinsetzen
    char c = Zeichenc[rand()%Zeichenc.Length()];
    const AnsiString Zeichend = "abcdefghjkmnopqrstuvwxyzABCDEFGHJKMNOPQRSTUVWXYZ1234567890#!&"; // Alle druckbaren gewünschten Zeichen einmal hiereinsetzen
    char d = Zeichend[rand()%Zeichend.Length()];
    const AnsiString Zeichene = "abcdefghjkmnopqrstuvwxyzABCDEFGHJKMNOPQRSTUVWXYZ1234567890#!&"; // Alle druckbaren gewünschten Zeichen einmal hiereinsetzen
    char e = Zeichene[rand()%Zeichene.Length()];
    const AnsiString Zeichenf = "abcdefghjkmnopqrstuvwxyzABCDEFGHJKMNOPQRSTUVWXYZ1234567890#!&"; // Alle druckbaren gewünschten Zeichen einmal hiereinsetzen
    char f = Zeichenf[rand()%Zeichenf.Length()];
    
      Edit2->Text=a+b+c+d+e+f;
    

    im edit feld kommen immer nur zahlen, je 3 zeichen nicht 6 wie ich mir das dachte 😢

    und dann kann ich den knopf 5 mal ca drücken dann bricht er ab wegen einen ThrowIfOutOfRange(idx) fehler.

    hab mal zum testen die ziffern in den möglichen zeichen mal weg gelassen, dann bringt er sofort diesen fehler.

    wenn ich nur ein zeichen ausgebe, wie du das geschrieben hast akari, macht er den fehler aber auch 😕

    wenn es so klappen würde were das perfect!

    =========================================
    hab das jetzt so gemacht, denke so meint ihr es auch also kombination imit der schleife, sieht jetzt sehr gut aus!! aber der fehler kommt immer nocht nach 5mal drücken des buttons 😞

    Edit2->Text = "";
    for (int i=0;i<6;i++)
    {
    const AnsiString Zeichena = "abcdefghjkmnopqrstuvwxyzABCDEFGHJKMNOPQRSTUVWXYZ1234567890#!&"; // Alle druckbaren gewünschten Zeichen einmal hiereinsetzen
    char a = Zeichena[rand()%Zeichena.Length()];
    
      Edit2->Text=Edit2->Text + a;
      }
    


  • randomize(); //nur einmal aufrufen, z.B. im Form-Konstruktor
      ...
      const AnsiString Zeichena = "abcdefghjkmnopqrstuvwxyzABCDEFGHJKMNOPQRSTUVWXYZ1234567890#!&"; // Alle druckbaren gewünschten Zeichen einmal hiereinsetzen
      String Password = "";
      int PasswordLength = 8;
      for (int i = 0; i < PasswordLength; i++)
        Password += Zeichena[rand() % Zeichena.Length() + 1];
      ShowMessage(Password);
    


  • wunderbar!!

    was macht den randomize(); und glaube das +1 hinter dem lengh macht noch was aus.

    könntest du das bitte kurz erläutern? warum der fehler dadurch behoben wird? was passierte den da?

    big thx



  • randomize() initialisiert den Zufallsgenerator. Hätte dir ein Blick in die Hilfe auch verraten.

    AnsiString-Elemente werden von 1 an gezählt, im Gegensatz zum sonst bei Arrays üblichen Beginn bei 0.
    Das +1 sorgt dafür, dass wir immer mindesten 1 als Ergebnis erhalten und somit nie versehentlich auf das "nullte" Zeichen des AnsiStrings zugreifen.


Anmelden zum Antworten