Hallo Community ,
mein Problem liegt bei der Auswertung bzw. bei der Rückgabe von StringInStr(), welche Binär- bzw. (bei AutoIt) Hex-Werte (StringInStr() | BIN | HEX) vergleichen soll.
Um es schlüssig zu machen muss ich ein klein wenig ausholen, damit ihr Gelegenheit habt mir zu helfen --- dies ist es was ich mir erhoffe, da ich kein Einsteiger in AutoIt oder der Programmierung generell bin und trotzdem hierbei ein wenig ratlos bin . Also folgendes:
In der Abbildung (siehe Anhang unten) ist der gesamte Quellcode des Skriptes enthalten (welcher jedoch nur ein Ausschnitt eines größeren Projekts ist). In erster Linie erstelle ich eine tmp-Datei, die mir als Zwischenspeicher dient. Danach lese ich im @ScriptDir alle *.jpg-Dateien ein und möchte diese per CMD > copy /B Befehl, in eine Datei (binär aneinandergehängt) umleiten bzw. kopieren lassen. Vor dem copy /B Befehl lese ich die ersten 50 Zeilen der Bilder ein (also bei 4 Bildern, jeweils 50 Zeilen pro Bild). Diese Information soll dann in die angelegte tmp-Datei, welche bei 4 Bildern, 4 Zeilen am Ende haben soll (mit dem Inhalt pro Zeile: 50 Fragmente des jeweiligen Bildes (in BIN bzw. HEX-Form)). Bisher alles kein Problem.
Eingelesen in den Zwischenspeicher (4 Bilder a' die ersten 50 Zeilen daraus, in tmp-Datei 4 Zeilen insgesamt) wird ausgeführt. Nun folgt der copy /B Befehl und der entstandene Container (im Bsp. hier, container.jpg) wird ebenfalls eingelesen (bei den FileRead()-Varianten wechsel ich immer beide Stellen, doch dies folgt unterhalb noch näher erläutert). Das Einlesen des Containers nutze ich, damit ich nach noch folgenden Aktionen (Implementierung folgt), den Container wieder binär auf die Fragmente im Zwischenspeicher prüfen kann bzw. den compare (Vergleich) durchführen kann.
Den Vergleich habe ich mal simuliert über eine Do-Until-Schleife, die mir die Container-Datei (die Zusammenfassung der 4 Bilder, binär aneinandergehängt) mit den Fragmenten im Zwischenspeicher (tmp-Datei) vergleicht. Nun folgt endlich die Frage bzw. der Fehler oder auch das WIESO ...
... in den Zeilen 41 und 42 (sowie 78 und 79) habe ich die Einlesevarianten über FileOpen() --- default: 0 (normaler read mode), binär: 16 (binary mode) gegengetestet! Dabei kann ich mit StringInStr() und der Variante "0" in der Do-Until-Schleife eine positive Meldung "Ist enthalten in Container-Datei." verzeichnen und mit Variante "16" nur die andere Meldung der Bedingungsklausel (das der String nicht enthalten ist). Also der Vergleich ob eine der Zeilen der Fragment-Datei (tmp-Datei) im Container enthalten ist, läuft schief, obwohl ich manuell alles genauso nachvollziehen kann und über Notepad++ bspw. der Vergleich funktioniert!
Gibt es bekannte Probleme beim Vergleich bzw. beim "contain in" | "contains" von HEX-Dateien bei AutoIt? Gibt es sinnvolle alternativen die mit HEX, was ja eigentlich BIN sein sollte jedoch AutoIt nicht so macht, umgehen können? Wie könnte ich noch verfahren?
Ich bin über jede Anregung und Hilfe sehr dankbar und hoffe das es nachvollziehbar ankommt. Ansonsten kann gern einfach selbst das Skript ausprobiert werden. Dazu einfach ein Verzeichnis mit *.jpg-Dateien (es reichen ja kleine Bilder, vielleicht so 3 - 4 Stück sowie das Skript ablegen und mit den ganzen debug()-Funktionen ausführen. Empfehlung, damit die Übersicht gewahrt bleibt. Der Quellcode sollte auch recht selbsterklärend sein, hoffe ich.
ANHANG
1. EnAndDeCrpyt.au3.txt >>> ist eine HTML Datei (ein Export des Skriptes per SciTE) >>> bitte in *.html umbenennen!
2. EnAndDeCrypt.au3.png
3. der LINK zum Skript hier: LINK
Danke für eure Hilfe --- UserIsGrateful