Einzelnen Beitrag anzeigen

Benutzerbild von mael
mael

Registriert seit: 13. Jan 2005
391 Beiträge
 
Delphi XE3 Professional
 
#219

Re: HxD - schneller Hexeditor, Disk-Editor und RAM-Editor

  Alt 15. Apr 2008, 15:10
Zitat von xZise:
wäre es möglich ein "Hex to Dec" bzw. "Dec to Hex" Feld einzubauen?
Ja, ist geplant

Zitat von werwiewas:
Zitat von mael:
Eine Binärkopie wird es aber nicht werden, da z.B. auch #0-Zeichen vorkommen können und die Windows-Zwischenablage den Text bei einem Nullzeichen abschneidet.
Das stimmt so nicht: Es ist nicht die Windows Zwischenablage, die den Text abschneidet, sondern der Editor, der den Text einfügen. Ich will hier keine Werbung machen, aber es gibt Editoren, die #0 inkl. anschließendem Text problemlos einfügen.
Das Problem ist, daß der Speicher den man über GlobalAlloc für die Kopie in der Zwischenablage reservieren muß größer sein kann als angefordert (Also für "Text" brauche ich 4 oder 5 Bytes (falls Nullzeichen mitkopiert wird), es werden tatsächlich aber 16 Bytes reserviert). In der WinAPI-Dokumentation steht zu GlobalAlloc "The size of a memory block may be larger than the size requested when the memory was allocated.". D.h. entweder enthält das Zwischenablagenformat eine Größenangabe (Bei Bitmaps ist das z.B. Teil des Formats) oder man verwendet GlobalSize um die Anzahl der Bytes zu ermitteln die man aus der Zwischenablage lesen soll. GlobalSize wird aber wie gesagt eventuell mehr zurückgeben als eigentlich reserviert und geschrieben wurde, am Ende stehen also eventuell uninitialisierte Daten. Um zu verhindern daß diese zusätzlichen Daten mit eingefügt werden wird bei Text das #0-Zeichen als Ende-Zeichen verwendet. Dazu gibt es daher keine Alternative. Wäre in Windows das CF_TEXT Format so definiert worden, daß die ersten vier Bytes z.B. die Länge des Textes angeben gäbe es diese Problem nicht, aber da kein aktuelles Programm diese Längenangabe erkennen würde hat dies auch keinen Sinn.

Zum Ansehen der Zwischenablage (mit allen Bytes in "Rohform") habe ich mal was Kleines gemacht: http://mh-nexus.de/downloads/RawClipView.exe (Unter Windows XP liefert GlobalSize normalerweise die "richtigen" Werte, aber es ist nicht garantiert, daß dies immer und in jeder Windows-Version so ist).


Zitat von werwiewas:
Zitat von mael:
Außerdem wird auch der Zeichensatz beachtet (z.B. DOS/OEM anstatt ANSI), also ist es keine wirkliche Binärkopie (das macht aber nichts, da die Bytedaten sowieso zusätzlich kopiert werden).
Binär <> Zeichensatz!
Sicher, "Binär <> Zeichensatz". Lade mal irgendeine Datei in HxD, dann kopiere (in der Textspalte!) einen Teil, einmal mit ANSI-Zeichensatz einmal mit DOS-Zeichensatz, und füge beides in einen Unicode-fähigen Editor ein, z.B. Wordpad/Notepad. Die gleichen Daten werden also zu verschiedenem Text übersetzt und das ist auch so gewollt.

Zitat von werwiewas:
Die 100% Binärkopie ist absolut wichtig, z.B. um Blöcke aus 10 MB XML Dateien zu extrahieren und Parser zu testen.
Es gibt keine Möglichkeit Binärkopien zwischen verschiedenen Programmen zuverlässig über die Zwischenablage auszutauschen, weil das Textformat CF_TEXT vom aktuellen Windows-Zeichensatz abhängig ist und CF_UNICODETEXT zwei Bytes pro Zeichen verwendet. Die einzige Möglichkeit ist eine Folge von Hex-Zeichen die dann wieder zurückkonvertiert werden können.

Das ändert nichts daran, daß HxD zusätzlich eine Binärkopie anlegt, d.h. wenn man innerhalb HxD's kopiert und einfügt bekommt man eine identische Kopie. (Texteditoren können mit "Binärdaten" nicht viel anfangen, denn Text ist immer von einem Zeichensatz abhängig, daher halte ich diese Implementierung für sinnvoll).

Zitat von werwiewas:
Mir geht es eben genau nicht um die Textrepräsentation, sondern um binär ohne wenn und aber!
Zwischen Programmen, abgesehen von Hexeditoren die eine Folge von Hex-Zeichen verstehen ist das nicht machbar. Innerhalb HxDs einfach kopieren und einfügen (strg+c/strg+v) und es sollte eine identische Kopie gemacht werden (unabhängig vom Zeichensatz). Was in der Windows-Zwischenablage als Text steht ist dann unerheblich.

Zitat von werwiewas:
Alternativ habe ich versucht, aus HxD heraus zu kopieren und in eine neue, leere Datei in HxD einzufügen. Leider geht das nicht, solange die neue Datei noch wirklich leer ist. Fehlermeldung: Ungültige Hex-Werte.
Dann muß man auf die Hex-Spalte gehen und von dort kopieren. Falls HxD nicht zwischenzeitlich geschlossen wurde sollte das aber gar nicht passieren (da noch in der internen Zwischenablage).
Wie genau bist Du vorgegangen? Z.B. Kopiert, dann im Texteditor XY bearbeitet, dann wieder eingefügt. Oder kopiert, HxD geschlossen, wieder in HxD eingefügt.
HxD, schneller Hexeditor:
http://mh-nexus.de/hxd
  Mit Zitat antworten Zitat