Entwickler-Ecke

Sonstiges (Delphi) - Datei Binär einlesen


Chatfix - Di 10.07.07 08:49
Titel: Datei Binär einlesen
Hallo,

ich möchte eine Datei binär einlesen.
Es soll Praktisch "0110 1110" intern stehen.

Wenn ich das habe möchte ich dann Bitweise verschieben. Z. B. ein Bit nach links.

Es würde dann so aussehen (Beispiel oben): "1101 1100"
Das erste Bit wird hinten rangesetzt. Wenn ich nach rechts verschiebe das letzte vorn ran.

Hat jemand eine Idee wie man das realisieren könnte?


Narses - Di 10.07.07 09:36
Titel: Re: Datei Binär einlesen
Moin!

8) Bist du sicher, dass du verstehst, was du da tun willst... :? ;)

user profile iconChatfix hat folgendes geschrieben:
ich möchte eine Datei binär einlesen.
Es soll Praktisch "0110 1110" intern stehen.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
var
  FS: TFileStream;
  Datei: String;
begin
  FS := TFileStream.Create('c:\test.txt',fmOpenRead or fmShareDenyWrite);
  try
    SetLength(Datei,FS.Size);
    FS.Read(PChar(Datei)^,Length(Datei));
  finally
    FS.Free;
  end;


user profile iconChatfix hat folgendes geschrieben:
Wenn ich das habe möchte ich dann Bitweise verschieben. Z. B. ein Bit nach links.

Was willst du verschieben, die Bits pro Byte, das gesamte File als große Bitfolge... :nixweiss: Und, ehrlich gesagt, was soll das... :gruebel: :?!?: ;)

cu
Narses


Chatfix - Di 10.07.07 09:49

Nein die Datei als große Bitfolge.

Was das soll weis ich selber nicht, mein Arbeitskollege hat gesagt wenn ich mal lange weile hab soll ich mich dem mal annehmen, dieser ist jetzt im Urlaub deswegen kann ich keine Details hinterfragen. Ich dachte einfach ich mache ihm eine Freude, wenn er kommt hat er sein Programm...


Narses - Di 10.07.07 10:06

Moin!

user profile iconChatfix hat folgendes geschrieben:
Nein die Datei als große Bitfolge.

Was das soll weis ich selber nicht, mein Arbeitskollege hat gesagt wenn ich mal lange weile hab soll ich mich dem mal annehmen,

OK, wenn das so ist, dann würde ich sagen, du fängst jetzt man damit an, deine Langeweile zu bekämpfen und findest mal selbst raus, wie das geht... :roll:

OMG, womit man nicht alles so seine Zeit vergeuden kann, z.B. auf so ein Posting zu antworten...

cu
Narses


Kroko - Di 10.07.07 10:11

Vorschlag: mach doch gleich daraus ein schwarz-weiß-Bitmap mit
Bit=0 -> schwarz
Bit=1 -> weiß
:wink:


Chatfix - Di 10.07.07 10:57

Ja das wäre eine schöne Idee der visuellen Umsetzung, aber ich glaube die ist unnötig.

@ Narses dann lass es doch einfach ;)
Muss es immer alles einen Sinn haben?

Ich werde mich schon damit beschäftigen, so langsam glaube ich echt Fragen sind hier im DF unerwünscht...


Kroko - Di 10.07.07 11:30

(a) Datei Byte/Word-weise lesen
(b) Byte/Word in "Binär-String" umwandeln
(c) Strings zusammensetzen
(d) fertig!


OlafSt - Di 10.07.07 11:46

Eigentlich ist das ganze doch recht simpel.

1. Datei einlesen. Wurde hier schon gezeigt, wie das geht.
2. Vom ersten gelesenen Byte das oberste Bit isolieren und merken, dann 1x nach links shiften
3. Schleife:
3.1 Von Byte(n+1) das oberste Bit isolieren
3.2 Byte(n+1) einmal nach links shiften
3.3 das gemerkte Bit als unterstes Bit in Byte(n) ein-Odern
3.4 n=n+1 und zurück zu 3.1, bis wir das letzte Byte zu fassen haben
4. In das letzte Byte (das schon geshiftet wurde) noch das bei 2. gemerkte Bit als unterstes Bit ein-Odern
5. Datei wieder wegspeichern.

Klingt einfach, ist einfach. Und mir ist klar, das das ganze mit DWords deutlich schneller geht - aber der das ist dann nur halb so lehrreich ;)


Narses - Di 10.07.07 11:47

Moin!

user profile iconChatfix hat folgendes geschrieben:
Ich werde mich schon damit beschäftigen, so langsam glaube ich echt Fragen sind hier im DF unerwünscht...

Langsam, DU solltest dich damit im Falle von brüllender Langeweile beschäftigen (laut deinem Kollegen), von "stell im DF Fragen zu sinnlosen Zeittotschlagaufgaben" hat er nichts gesagt... :roll: 8) (und ich kann mir auch nicht vorstellen, dass du etwas lernst, wenn du dich nicht mit den Grundlagen beschäftigst, die zum Verstehen dieser Aufgabe nötig sind - was dein Kollege wohl auch im Sinn hatte, mit der (sinnlosen) Aufgabe)

Trotzdem noch viel Erfolg! :zustimm:

cu
Narses


Chatfix - Di 10.07.07 12:12

Stand irgendwo was von postet mir den Sourcecode?

Und mein Kollege gab mir diese Aufgabe sicher nich damit ich was lerne (man lernt ja sowieso ständig), er ist derzeit einfach anderweitig beschäftigt um sich selbst darum zu kümmern. Das Programm hat auch keinerlei Priorität, ich nehme an er will irgendeine Spielerei testen....
Da wir betrieblich nicht mit Delphi programmieren und er meinte ihm sei die Sprache egal, wusste ich sofort es ist etwas privater Natur.
Aber das tut hier auch absolut nix zu Sache, ich hätte auch sagen können ich will mal was ausprobieren...

Und es is schön das du darauf rumreitest das ich es machen sollte, ich dachte trotzdem das man hier Hilfestellungen bekommt, und nich dumm angemacht wird nur weil es jemandem sinnlos erscheint...

Aber schon ok, es hat sich hier anscheinend doch einiges geändert... Ich wollts vielleicht nur nicht wahr haben...

Und nun schweifen wir vom Thema ab, danke an alle die sich mit der eigentlichen Aufgabe beschäftigt haben und mir erste Denkanstöße gegeben haben.


Narses - Di 10.07.07 12:19

Moin!

user profile iconChatfix hat folgendes geschrieben:
Und es is schön das du darauf rumreitest das ich es machen sollte, ich dachte trotzdem das man hier Hilfestellungen bekommt, und nich dumm angemacht wird nur weil es jemandem sinnlos erscheint...

Jetzt komm mal wieder auf den Teppich, du hast doch deine Hilfestellung bekommen, oder? ;)

user profile iconChatfix hat folgendes geschrieben:
Aber schon ok, es hat sich hier anscheinend doch einiges geändert... Ich wollts vielleicht nur nicht wahr haben...
[...]
Muss es immer alles einen Sinn haben?

Nein, aber die Frage danach muss schon erlaubt sein. :| Und eine Diskussion darüber bräuchte auch nicht in der Form von dir abgelehnt werden... das ist dann auf dem Niveau, das du hier beklagst. 8)

cu
Narses


Chatfix - Di 10.07.07 12:52

Ich habe dir die Frage nach dem Sinn beantwortet, sofern ich das konnte, und dann kam deine provozierende Antwort darauf...

Aber schluss jetzt... am betsen Thema schliesen oder löschen...


UGrohne - Di 10.07.07 13:09

Alle weiteren OT-Diskussionen über Sinn und/oder Unsinn dieser Frage bitte ich nun einzustellen, denn sie werden gelöscht. Ab jetzt nur noch Fragen/Hinweise zum Thema, sofern noch notwendig oder vorhanden!