Forum: PC-Programmierung Flashloader - Binärdaten visualisieren


von Leo (Gast)


Angehängte Dateien:

Lesenswert?

Guten Morgen,

mit C# habe ich für einen Mikrocontroller ein Flashloader Programm 
entwickelt. Dieses Programm möchte ich nun um eine weitere 
Funktionalität erweitern, indem die Binärendaten in einem Fenster 
dargestellt werden sollen. Siehe Anhang. Wie könnte man sowas in C# 
realisieren? Mit welchem Element von der C# Toolbox?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Das ist einfacher Text (sofern Dir die Farben nicht auch noch wichtig 
sind).

Also brauchst Du nur ein Fenster, das Text anzeigen kann. Den Text, der 
dann angezeigt wird, den erzeugst Du einfach selber.

Sind die Farben wichtig, kannst Du ein Textfenster verwenden, das 
formatierten Text anzeigen kann, i.d.R. ist das RTF. Den erzeugt dann 
Dein Programm wiederum selber, und gibt ensprechende 
Formatierungsanweisungen für die bunten Zeichen aus.

Beides keine Raketenwissenschaft, bei RTF wirst Du allerdings etwas Zeit 
investieren müssen, um die Formatierungsbefehle herauszufinden.

Anstelle von RTF kannst Du natürlich auch HTML verwenden, und ein 
Textfenster nutzen, das HTML-Inhalte anzeigen kann.

Auch keine Raketenwissenschaft.


Und das Grundprinzip, daß Du den Hexdump als Text selbst erzeugst und 
ihn dem jeweiligen Fenster übergibst, das bleibt in allen drei Varianten 
das gleiche.

von Robert L. (lrlr)


Lesenswert?

wenn es nicht ums editieren geht, sondern nur ums anzeigen,  die Farben 
wichtig sind, (und wenn es um große Files gehen würde) würde ich den 
Text selber malen .. (in einer Scrollbox)

ansonsten mal VirtualTreeView anschauen (ich behaupte mal, den gibt es 
auch für C#??)

das würde sich anbieten, wenn du nicht nur "dumm" anzeigst, sondern auch 
irgendwie analysierst (z.b. in verschiedene Bereiche einteilst..)

damit ließe sich auch einfach(er) ein Hex editor bauen..


(RTF/HTML würde ich auf keine Fall machen..)

von Leo (Gast)


Lesenswert?

Hallo,

erstaml vielen Dank für eurie Hilfe. Ich hab mich nun für das ListView 
Toolbox Element entschieden.

Die binären Daten sind in einem Bytearray gespeichert. Dieses Array hat 
0x80000 Elemente. Jede Zeile soll insgesamt 16 Bytes anzeigen. WIe 
könnte man den unteren C# Code erweitern, damit nach jeden 16 Bytes eine 
neue Zeile erstellt wird?
1
ListViewItem lvi1 = new ListViewItem("00000000");
2
for(int i=0; i<16; i++)
3
   lvi1.SubItems.Add(BinData[i].ToString("X"));
4
listView1.Items.Add(lvi1);

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Leo schrieb:
> WIe
> könnte man den unteren C# Code erweitern, damit nach jeden 16 Bytes eine
> neue Zeile erstellt wird?

Wodurch wird eine neue Zeile gekennzeichnet?

Durch einen Zeilenumbruch, also durch \n oder gegebenenfalls die 
Kombination \r\n.


Das musst Du also nur an geeigneter Stelle in Deinen String eintragen.

von Kail (Gast)


Lesenswert?

Zeilenumbrüche in einer Listview?
Eigentlich sollte jedes Listenelement genau eine Zeile haben. Einen 
Umbruch gibt es in dem Sinne nicht. D.h. wenn du eine neue Zeile haben 
willst, fügst du halt ein neues Listenelement hinzu.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Kail schrieb:
> Zeilenumbrüche in einer Listview?

Wenn es ein Listview ist, natürlich nicht.

Bei einem simplen Textcontrol aber wäre das die Vorgehensweise.

Ein Listview, der mit 0x8000 Items und 0x80000 Subitems gefüllt wird, 
wird sehr langsam. Das Füllen dauert ewig.

Einen Text von etwa 2 MByte Größe (512 kB Daten à 3 Zeichen, Adressen 
und Zeilenumbrüche dazu) in ein Textcontrol einzufüllen geht jedenfalls 
deutlich schneller.

von Kail (Gast)


Lesenswert?

Ui, wenn es so viele Elemente sind muss man sich schon etwas mehr 
Gedanken machen, damit das ganze verzögerungsfrei und flüssig Läuft.

Dein Vorteil ist, dass ja immer nur ein kleiner Ausschnitt der Daten zu 
sehen ist. D.h. du solltest eine effiziente Datenstruktur verwenden, um 
die Daten vorzuhalten. aus der suchst du dann immer die aktuell 
Sichtbaren heraus, und renderst diese im Control.

Normale WinForms Controls dürften dazu zu dumm sein, und ständig mit dem 
kompletten Datanklotz herumjonglieren.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Kail schrieb:
> Dein Vorteil ist, dass ja immer nur ein kleiner Ausschnitt der Daten zu
> sehen ist.

Ein Stichpunkt hierfür wäre virtual ListView.

Nur: Wozu der Aufriss? Die simple Textmethode würde völlig ausreichen, 
es sei denn, es soll auch noch Bearbeitungsfunktionalität in Form eines 
einfachen Editors eingebaut werden.

Dann bietet der ListView natürlich die Möglichkeit, den Mausklick gleich 
dem korrespondierenden Byte zuzuordnen.

Aber davon war beim Threadstarter nicht die Rede, er will seinen Hexdump 
nur anzeigen.

von Versi (Gast)


Lesenswert?

Das kennst du, oder? :
System.ComponentModel.Design.ByteViewer

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.