Announcement

Collapse
No announcement yet.

Datei auslesen und als HEX speichern

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Datei auslesen und als HEX speichern

    Hallo alle zusammen. Da ich vor kurzem meine Ausbildung als FIAE angefangen hab habe ich mir ein kleines Projekt für mich privat ausgedacht. Ich muss leider dazu sagen dass ich bislang nur Grundkenntnisse im Proggen hab und währe dankbar für jede Antwort die ich bekomme.

    Ich möchte ein Konsolenprogramm schreiben dass mir ermöglicht eine Datei (z.B. test.dat) als HEX abzuspeichern. Dabei soll es möglich sein Quelle und Ziel anzugeben.
    Ich habe heute den ganzen Tag geGoogelt und diversen Foren gesucht usw.......
    Ein erstes Ergebniss habe ich auch schon bekommen:
    Konsole öffnet Datei -> Binär Daten werden ausgelesen und in der Konsole angezeigt.....
    Daten wurden danach als normaler Text in der Konsole angezeigt.
    Leider ist es nicht das Ergebniss das ich haben wollte.

    Könnte mir vieleicht jemand einen ansatz geben wie ich mit der ganzen Sache anfangen könnte.
    Hab schon diverse OpenBooks usw.. gelesen aber ohne praktisch etwas getan zu haben ist es nicht ganz einfach.

    Jetzt schonmal vielen Dank!

  • #2
    Also ich würde das, nach dem was ich verstanden habe, so machen:
    Code:
    ...
        static void Main(string[] args)
        {
          // Parameter angegeben? wenn nicht Meldung ausgeben und Ende
          if (args.Length == 0)
          {
            Console.WriteLine("USAGE: ASCII2HEX inputfile [outputfile]");
          }
          else
          {
            // mit List<> erzeugst mein einen Zeiger auf ein dynamisches Object im Heap
            // FileSigns ist also eine Liste vom Typ char mit allen Zeichen in der Datei
            // die Zeichen der Datei liefert uns die Funktion getASCiiFile() der wir nur den Dateinamen übergeben müssen (args[0]???)
    
            List<char> FileSigns = getASCiiFile(args[0]);
    
            // wenn kein 2. Parameter angegeben wurde erzeugen wir den Dateinamen aus dem Ersten durch austauschen der Extension
            // dann schreiben wir in der Methode 'setHexFile' die CharListe ind die angegebene Datei
            if (args.Length > 1)
            {
              setHexFile(args[1], FileSigns);
            }
            else
            {
              string fileName = args[0];
              fileName = fileName.Substring(0, fileName.IndexOf(".")) + ".hex";
              setHexFile(fileName, FileSigns);
            }
          }
        }
    
        static List<char> getASCiiFile(string fileName)
        {
          // lokale Variable für Rückgabewert als char-Liste (dynamisch im Heap)
          List<char> ASCiiSigns = new List<char>();
          ASCiiSigns.Clear();
    
          // Streamreader erstellen und mit Datei 'fileName' verbinden
          using (System.IO.StreamReader MyStreamReader = new System.IO.StreamReader(fileName))
          {
            // Bis zum Ende zeichenweise auslesen...
            while (MyStreamReader.Peek() >= 0)
            {
              // ...und dabei jedes Zeichen unserer Rückgabevariablen hinzufügen
              ASCiiSigns.Add((char)MyStreamReader.Read());
            }
          }
          return ASCiiSigns;
        }
    
        static void setHexFile(string fileName, List<char> FileSigns)
        {
          // existiert die Zieldatei dann löschen wir sie einfach  ;)
          if (System.IO.File.Exists(fileName))
          {
            System.IO.File.Delete(fileName);
          }
    
          using (System.IO.StreamWriter MyStreamWriter = new System.IO.StreamWriter(fileName))
          {
            // jedes einzelne Zeichen aus der Liste lesen...
            foreach (char sign in FileSigns)
            {
              string hexSign = "";
    
              // ...zu einem Byte umwandeln und führende Nullen hinzufügen
              if (Convert.ToByte(sign) < 10)
              {
                hexSign = "00" + Convert.ToString(Convert.ToByte(sign));
              }
              else if (Convert.ToByte(sign) < 100)
              {
                hexSign = "0" + Convert.ToString(Convert.ToByte(sign));
              } else
              {
                hexSign = Convert.ToString(Convert.ToByte(sign));
              }
    
              // jedes Zeichen in die Datei schreiben - für's Design noch ein Leerzeichen  :)
              MyStreamWriter.Write(hexSign + " ");
            }
          }
        }
    ...
    Das ganze habe ich nochmal als komplette VS.Solution angehängt...
    Attached Files

    Comment

    Working...
    X