Jonathan hat geschrieben: ↑20.11.2022, 07:56
Soweit ich weiß, hast du beim Öffnen im Textmodus zusätzliche automatische Konvertierung von Dingen wie New-Line Characters, während dir der Binärmodus die Datei so liefert, wie sie ist.
Mir scheint der Text-Modus ein wenig ein Relikt der Vergangenheit zu sein. Wenn du z.B. eine Datei im Textmodus einliest und direkt danach wieder schreibst, kann der Inhalt danach anders sein, weil Zeichen automatisch konvertiert wurden. "Relikt der Vergangenheit" deshalb, weil, soweit ich weiß, zwar Dinge wie Newlines berücksichtigt werden, aber sowas wie Unicode wiederum nicht. Du musst also ggf. nach dem Lesen trotzdem noch von Hand Anpassungen vornehmen, in Fällen wo das wichtig ist würde ich also direkt alles binär Öffnen und dann gleich alles von Hand machen.
dot hat geschrieben: ↑20.11.2022, 23:46
.bmp Files sind keine Textdateien, du kannst die im Textmodus gar nicht korrekt lesen weil Textmodus macht Dinge wie \r\n in \n übersetzen, filtert also potentiell Bytes aus dem Stream raus.
Fun fact: Das war der Grund für den Bug, der immer noch der Bug ist, der mich mit großem Abstand am meisten Zeit gekostet hat. Hab damals das ganze Programm vermutlich dreimal from Scratch neu geschrieben, weil ich mir einfach nicht erklären konnte wieso beim Lesen des 3d Models erst alles richtig läuft aber dann ab einem zufälligen Punkt auf einmal plötzlich nur Müll daherkommt… bis ich eines Tages durch Zufall auf einer MSDN Seite gelandet bin, wo im Text indirekt etwas erwähnt wurde, dass bedeutet hätte, dass Textmodus der Default sein könnte. Die Idee dass sowas wie Textmodus der Default wäre, war für mein naives Selbst einfach dermaßen unvorstellbar… tbf, ich finde es immer noch einfach nur falsch…
Ok, danke, alles klar! Dann werde ich künftig darauf achten, alles im binary Modus einzulesen. :-)
udok hat geschrieben: ↑28.11.2022, 22:02
Schön, das sich da was tut.
Aber wenn man den Byteswap anders formuliert, geht es wieder nicht...
Spannend! Auch wenn mir scheint, etwas über meinem Level. Hier gehts aber ausschliesslich darum, wie optimal der Maschinencode ist, den die verschiedenen Compiler erzeugen? Nicht, das die Methode mittels Bitshifting grunsätzlich problematisch wäre?
dot hat geschrieben: ↑15.11.2022, 12:18Sicher dass das mit MSVC war und nicht, e.g., clang? Ich versuche seit Jahren, MSVC dazu zu bewegen, einigermaßen effizienten Code für portable Serialization/Deserialization zu generieren; bisher ohne Erfolg…
Noch eine Randnotiz zum Anfang des Threads: Ich denke auch, dass BMP eine gute Übung ist, wenn man etwas im Low-Level-Bereich lernen möchte. Als ich vor etwa einem Monat durch die "Werbung" von xq mit Zig begonnen habe, war ich auch auf der Suche nach solchen einfachen Beispielprojekten, um verschiedene grundlegende Aspekte der Sprache vertiefen, wie hier die die Speicherauslegung. Direkt mit jpeg zu starten würde zu Beginn weniger die Sprache als vielmehr das Verfahren vertiefen.