Binärdaten mit Adresse, Hexadezimaler Schreibweise und in ASCII ausgeben
-
Hallo Leute,
So sieht die Ausgangssituation aus:
Ich möchte Dateien beliebiger Größe binär einlesen und in einem CEdit formatiert ausgeben:Adresse | 8 Bytes in hexadizimaler Schreibweise | Ascii-Wert der 8 Bytes
Das kennen wir ja alle von Hexeditoren. Die Datei wird erfolgreich gelesen und in einem unsigned char * hinterlegt.
Nun will ich sie formatiert ausgeben, packe also alles Stück für Stück mit CEdit::Append bzw CEdit::ApendFormat in das CEdit Feld rein (mehrzeilig).Das Prob:
Das daaaaaaauuuuert.... ewig... bei einer 128kb Datei sicher 5-10 Sekunden...
Kennt jemand einen besseren/schnelleren weg für so ein Problem? (Ich will die Daten nur anzeigen, nicht verändern)Ich nutze VS2005 Standard.
mfg
Karotte
Anhang: der Code, der das formatieren übernimmt
data.AppendFormat(_T("0x%06X | "), 0); int n = 0; for (int i=0; i < length; i++) { data.AppendFormat(_T("0x%02X|"), p_Buffer[i]); n++; if (n == 8) { data.Append(_T(" ")); for (int n=i-7; n < i; n++) { (p_Buffer[n]>31)?data.AppendFormat(_T("%c"), p_Buffer[n]):data.Append(_T(".")); } data.Append(_T("\r\n")); data.AppendFormat(_T("0x%06X | "), (i+1)); ctl_progress.StepIt(); n = 0; } } m_hex_out = data; UpdateData(false);
-
Liest du deine Datei in einem Rutsch ein? oder evtl. zeilenweise oder gar zeichenweise?
Versuchs doch mal mit einem Append. Also erst alles in ein String reinballern incl. Zeilenumbrüchen und dann am Schluss einmal Append.
Evtl. wird nach jedem Append ein OnPaint geschickt (grobe Vermutung), was das ganze sehr langsam machen könnte.
-
ja, ich lese Byte für Byte mit CEdit:ApendFormat().
habe auch schon drüber nachgedacht, das ganze in einem Feld von Bytes schon vorzubereiten, aber ich weiß nicht, ob es schneller geht, wenn ich mit realloc() mein feld ständig vergrößere. und das müsste ich ja, da noch die zusatz informationen wie Adressen, zeilenumbrüche etc. rein müssen.
andere meinungen??