habe probs bei ner decodierung



  • Hi! Bin neu hier! Also folgendes:
    Habe einen Code geschrieben der funktioniert, aber die falsche Ausgabe liefert. Das Programm arbeitet falsch! Ich zeig euch mal den Code:

    ifstream fin2(argv[2]);
             while (fin2.get(ch))
             {
                   if (ch=='%')
                   {
                      if (a!=0)
                      {
                         if (a==2)
                         {
                            asc = (letter[0]-'0')*10 + (letter[1]-'0');
                            cout << (char) asc;
                         }
                         if (a==3)
                         {
                            asc = (letter[0]-'0')*100 + (letter[1]-'0')*10 + (letter[2]-'0');
                            cout << (char) asc;
                         }
                      }
                      a=0;
                   }
                   else
                   {
                      a++;
                      if (a=1)
                      {
                         letter[0] = ch;
                      }
                      if (a=2)
                      {
                         letter[1] = ch;
                      }
                      if (a=3)
                      {
                         letter[2] = ch;
                      }
                   }
             }
             fin2.close();
    

    ...und die Ausgabe:
    *
    Þ xxoÞ+ oM
    *
    Wäre nett wenn mir einer mal einen Tipp geben könnte! Thx!
    smash++



  • Wäre auch nett wenn du mal erwähnst was er machen sollte



  • Das ist zu wenig Code um Dir "richtig" zu helfen, aber es sieht stark nach einem Fall für switch aus und "if (a=1)" etc ist wohl auch nicht das was Du machen wolltest, oder? Wäre nicht "if (a==1)" eher passend?



  • ifstream fin2(argv[2]);
    while (fin2.get(ch)) {
    if (ch=='%') {
      if (a) {
        if(a == 2)
          asc = (letter[0]-'0')*10 + (letter[1]-'0');
        else if(a == 3)
          asc = (letter[0]-'0')*100 + (letter[1]-'0')*10 + (letter[2]-'0');
        cout << char(asc);
        a=0;
      }
      else if(a >= 0 && a < 3 && sizeof(letter) / sizeof(char) < a)
        letter[a] = ch;
    }
    fin2.close();
    

    dürfte eigentlich besser funzen

    [ Dieser Beitrag wurde am 31.03.2003 um 16:13 Uhr von MaSTaH editiert. ]



  • Hi!
    Habe inzwischen schon etwas herumprobiert. Wenn man den Code folgendermaßen ändert,

    if (a==2)
                         {
                            asc = (letter[0]-'0')*10 + (letter[1]-'0');
                            letter[2] = 0;
                            cout << letter << '§';
                            /* cout << (char) asc; */
                         }
                         if (a==3)
                         {
                            asc = (letter[0]-'0')*100 + (letter[1]-'0')*10 + (letter[2]-'0');
                            letter[3] = 0;
                            cout << letter << '§';
                            /* cout << (char) asc; */
                         }
    

    müsste das Programm das Eingabefile ausgeben, nur mit einem § als Trennzeichen. Das tut es aber nicht, sondern es gibt folgendes aus:
    222º777º888º888º111º333º
    Auffallend ist das es immer 3 Zahlen sind, und aus der letzten Zahl jedes Paares besteht!

    PS:
    Was ich übrigens vergessen habe, das Programm liest von einer Datei z.B. folgende ASCII-Zeichen:
    %72%97%108%108%111%33%
    Es überspringt das %-Zeichen, liest die 7 und die 2 ein und beim nächsten %-Zeichen verarbeitet es die 7 und die 2. Dürfte eigentlich nicht so schwer sein, aber anscheint habe ich was übersehen!

    smash++


Anmelden zum Antworten