Entwickler-Ecke

C# - Die Sprache - [VS2008] Base64 Decoder Error


Levsen - Sa 04.10.08 07:24
Titel: [VS2008] Base64 Decoder Error
Hallo ich habe einen Base64 Encoder und Decoder gemacht baer das Decoden geht nicht :(

Wen ich Gecoden will kommt das
Zitat:
Der Index war außerhalb des Arraybereichs.


Hier mal der Code Schnippsel und in Zeile 10 ist der Fehler

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
    public Base64Decoder(char[] input)
    {
      int temp=0;
      source=input;
      length=input.Length;

      //find how many padding are there
      for (int x=0;x<2;x++)
      {
        if(input[length-x-1]=='=')//Bei der Zeile liegt der Fehler
          temp++;
      }
      paddingCount=temp;
      //calculate the blockCount;
      //assuming all whitespace and carriage returns/newline were removed.
      blockCount=length/4;
      length2=blockCount*3;
    }


Kann jemand helfen ?


Kha - Sa 04.10.08 09:35

Wenn der Fehler auftritt, sollte dir der Debugger doch die Inhalte aller Variablen zu diesem Zeitpunkt anzeigen und du damit selbst den Fehler in deinem Algorithmus finden können. Bis jetzt sieht es leider eher so aus, als ob du dir beim Debugging so viel Mühe gegeben hast wie bei der Rechtschreibung deines Postings :| .


JüTho - Sa 04.10.08 10:33

user profile iconKha hat folgendes geschrieben Zum zitierten Posting springen:
... so viel Mühe gegeben hast wie bei der Rechtschreibung deines Postings :| .

Nun ja, ich habe schon Beiträge mit schlimmeren Schreibweisen gelesen. Aber dass Debugging oft schneller helfen kann als jedes Forum, sehe ich genauso.

user profile iconLevsen hat folgendes geschrieben Zum zitierten Posting springen:
Wenn ich decoden will, kommt das: Rechtschreibung von JüTho korrigiert
Zitat:
Der Index war außerhalb des Arraybereichs.

Zusammen mit der Angabe der Zeile, in der der Fehler auftritt, kann man solch einen Fehler auch oft durch Nachdenken beseitigen: Offensichtlich wird der durch "length-x-1" berechnete Index kleiner als 0 oder größer als das Maximum. Das hängt also von lenght und von x ab. Welche Werte kann x annehmen? Aha, wegen der Schleife nur 0 und 1. Welche Werte kann length annehmen? Das hängt vom input ab. Dazu gibt es keine näheren Informationen; aber was passiert, wenn input nur 1 Byte umfasst? Boooiiing...

Auch eine solche Überlegung habe ich vermisst. Jürgen