Int -> Char* nicht möglich



  • Hi ihr!

    Ich habe mir ne Funktion zusammengestellt, mit der ich einen String mit Hilfe eines Vergleichsworts in ASCII verschlüsseln kann. Das Problem ist jetzt, das ich die "itoa" - Funktion nicht so ganz verwenden kann, könnte mir da mal jemand auf die Sprünge helfen??

    Hier die Funktion:

    String CryptPassword(String pwd)
    {
     String t_c ="InventVerw", encode ="", t_asc1, t_asc2, save_substr, save_substr2;
     char *akt_char, *akt_char2, *saved_char, *saved_char2, *saved_encode;
     int i, t_save, t_save2, t_e;
    
     for (i=1; i<pwd.Length(); i++)
     {
      //Übergebenes Passwort zerlegen
      save_substr =  pwd.SubString(i,1);
      save_substr2 = t_c.SubString(i,1);
    
      //char - wert des Zeichens bilden
      akt_char = save_substr.c_str();
      akt_char2 = save_substr2.c_str();
      //char - wert in ASCII Code übersetzen
      t_asc1 = IntToStr(*akt_char);
      t_asc2 = IntToStr(*akt_char2);
    
      if (t_asc1 > t_asc2)
      {
       t_e = (t_asc1-t_asc2)*2;
       if (t_e > 127)
       {
        t_e = 76;
       }
      }
      else if (t_asc1 < t_asc2)
      {
       t_e = (t_asc2 - t_asc1)*3;
       if (t_e > 127)
       {
        t_e = 34;
       }
      }
      else if (t_asc1 == t_asc2)
      {
       t_e = 68;
      }
      encode = encode + itoa(t_e, *saved_char, 16); //<----- Hier kommt der Fehler
     }
     return encode;
    }
    

    Meldung im Compilerfenster:

    [C++ Fehler] main.cpp(53): E2034 Konvertierung von 'int' nach 'char *' nicht möglich
    [C++ Fehler] main.cpp(53): E2342 Keine Übereinstimmung des Typs beim Parameter '__string' ('char *' erwartet, 'char' erhalten)
    

    Gruß,



  • Ich glaube es wird ein array und kein pointer auf ein array erwartet.

    Gruß Skay



  • Sollte ich da jetzt ein Array erstellen, das den ganzen ASCII Code enthält??? Das wär doch einwenig zuviel des Guten 😕 Oder??



  • Da sind gleich zwei Fehler drin:

    1. für saved_char wird kein Speicher reserviert
    2. Du mußt in itoa einen Pointer verwenden

    statt:

    char *saved_char;
    ...
    encode = encode + itoa(t_e, *saved_char, 16); //<----- Hier kommt der Fehler
    

    besser:

    char saved_char[33];
    ...
    itoa(t_e, saved_char, 16); 
    encode = encode + saved_char;
    


  • Klasse Geo 👍 Funzt prima. ___Und wieder ist man etwas schlauer geworden. 😃


Anmelden zum Antworten