====== Hexeditor ====== ===== Auftrag ===== * Der Editor soll in der Lage sein, hauseigene Dateien zu öffnen, zu verändern und verändert abzuspeichern. * Er soll den Inhalt der Dateien in hexadezimaler Form anzeigen. * Er soll über eine Suchfunktion zum Auffinden bestimmter Passagen verfügen. * Es handelt sich um eine Windows-Forms-Anwendung. Als Anwendungsfalldiagramm. {{:schule:prog:hexeditor-use-case.png?nolink|}} ===== Dateioperation: Datei öffnen und anzeigen ===== Der Artikel [[Dateioperationen]] beschreibt den Umgang mit Dateien. ===== Hausaufgabe: Konvertierung von Dezimal- in Hexadezimalzahl ===== Informiere dich über die Schreibweise Hexadezimaler Zahlen und entwickle den Algorithmus der Methode ''dezimalNachHex(iZahl: int): string''. Er wandelt eine Zahl aus unserem Zehnersystem in eine Hexzahl um. Die Form ist beliebig. ===== Datei einlesen, Bytes in Hexzahlen konvertieren und anzeigen ===== - Erstelle eine einfache Textdatei test.txt mit dem Inhalt ''ABC'' - Lies die Datei byteweise ein und konvertiere das Ergebnis in eine Hexzahl. - Zeige das Ergebnis an. ===== Analyse einer Bilddatei ===== Analysiere eine 24Bit-Bitmapdatei. Nutze dazu den Blogartikel [[blog>bildanalyse-ein-tiefer-einblick-in-das-windows-bitmap-bildformat-bmp|Analyse des BMP-Bildformates]] - Identifiziere, wo erkennbar ist, dass es sich um eine Bitmapdatei handelt. - Wo sind die Dateigröße, - die Auflösung und - die Farbinformationen abgelegt? Bilder können auch komprimiert abgespeichert werden. Die [[https://teachinglondoncomputing.org/pixel-puzzles/|Pixel Puzzle]]-Arbeitsblätter zeigen eine Möglichkeit, wie man alle Bildinformationen speichern kann, ohne jeden Pixel explizit abspeichern zu müssen. Überlege dir, wie du es machen könntest, bevor du die Seite öffnest: ===== Anwendungsfall "Datei speichern" ===== * neue Methode: ''int hexNachDezimal(string sHex)'' * Hexwerte im Textfeld in string aufteilen (''Split()'') * Datei öffnen (Klasse ''FileStream'') * Jeden Hexwert in Bytewert konvertieren und in die Datei schreiben (''WriteByte()''). * Datei schließen (''Close()'') ===== Links ===== * Der Vortrag [[https://media.ccc.de/v/31c3_-_5930_-_en_-_saal_6_-_201412291400_-_funky_file_formats_-_ange_albertini|Funky File Formats]] vom 31C3 zeigt, wie man unterschiedliche Dateiformate ineinander einbetten kann. * Textdateien lassen sich in unterschiedlichen Kodierungen (Formaten) abspeichern -- z.B. in [[wpde>ASCII]] (7Bit, keine Umlaute), [[wpde>ISO 8859-1]] (genannt //latin1//, 8-Bit-Format mit Umlauten aber ohne €-Zeichen) oder [[wpde>UTF8]] (bis zu 8 Byte, abwärtskompatibel). * Einen tieferen Einstieg in die Arbeit eine Computers auf der Ebene von Assembleranweisungen wird in Kap. "0x250 Getting Your Hands Dirty" in //Hacking - The Art Of Exploitation// beschrieben. * Der Artikel [[http://setosa.io/ev/image-kernels/|Image Kernels Explained Visually]] zeigt interaktiv wie das Schärfen von Bildern und anderen Bildfilter funktionieren.