online 1
gast (50)

/ Forum / Anwendungen(Java,C++...)

Anwendungen(Java,C++...)Anwendungen(Java,C++...)

Fragevon TByte vom 12.08.2020, 13:24 Options

Komplexere Datentypen

Hallo
Also bis jetzt habe ich nur Erfahrungen im Bereich I/O von TEXTDateien. Wie siehts denn aber mit komplexen binären Datentypen aus? Wie z.B. jpg? Das ist ja auch ein FORMAT! Und die leute entwickeln ständig irgendwelche endungen, formate, die andere Proggies nicht lesen können. Als Beispiel: OpenOffice.org ODT kann von MS Office nicht gelesen werden.
Und überhaupt das mpg-Format: Da sitzen leute drann, die die ganze Zeit sich mit neuen Formaten beschäftigen!
Meine Frage:
Wie kann man solche Formate einlesen??? Wie kann man solche Formate entwickeln?????
Das beschäfigt mich shon ne zeit lang!
Danke für all eure AWs!
mfg
TByte


Antwort schreiben

Antwort 1 von Jaja vom 12.08.2020, 13:33 Options

Zitat:
Wie kann man solche Formate einlesen???


in welcher sprache denn überhaupt?

unter C öffnest du die datei ganz normal über

FILE *fhd;
fhd=open(dateiname,"rb");

und liest dann die daten über fread ein.. mit fseek() und anderen funktionen kannst du zu bestimmten offsets springen.
ganz low level kannst du das auch über read() machen - wie es dir gefällt.

im allgemeinen nimmt man aber bibiotheken, um ein bestimmtes (binär) format zu öffnen. so gibt es z.b. eine ganze reihe bibliotheken um die ID3 tags vom mp3 einzulesen/schreiben. du kannst das aber auch alleine machen mit o.g. funktionen..
die funktionen einer spezielln bibliothek sind aaber einfacher und sicherer..
für alle halbwegs offenen formate gibt es bibliotheke für alle halbwegs verbreiteten sprachen (im zweifelsfalle C).

Zitat:
Wie kann man solche Formate entwickeln?????


du kannst dir einfach was mehr oder minder sinnvolles ausdenken.
ein gutes format ist:

1. auf einen bestimmen zweck ausgelegt - logisch
2. berücksichtigt eigenheiten der zielplattform (z.b. data alignment)
3. ist erweiterbar (vorwärts/rückwärtskompatibel)
4. ist nicht redundant zu einem bestehenden format
5. ist frei wie freibier und freie rede..

Antwort 2 von tomsan vom 12.08.2020, 13:35 Options

Hmmm... kann irgendwie keine sinnvolle Frage erkennen! Mal die offensichtlichen beantworten:

Zitat:
Wie kann man solche Formate einlesen???

Mirt dem ensprechende Leseprogramm oder evtl reicht ein bestimmter Codec

Zitat:
Wie kann man solche Formate entwickeln?????

Was "wie"? Damit verdienen manche Leute ihr Geld.


Zitat:
Und die leute entwickeln ständig irgendwelche endungen, formate

Klar... Stillstand ist doch nix gutes, oder? Und "Leseprogramme/möglichkeiten" gibts doch auch gleich.



Verstehe nicht wirklich, auf was Du raus willst. Nicht glücklich ne 30MB WAV in handliches wie Ogg Vobis einzudampfen?

Antwort 3 von Jaja vom 12.08.2020, 13:39 Options

ergänzung:

..ich bin jetzt mal davon ausgegangen das du mit format die physikalische repräsentation von daten in einer "datei" meinst. darunter fallen alle deine beispiele...

tomsan ging hier mehr auf die datenstrukturen ein - die verlangen zum dekodieren natürlich einen codec, oder grob gesagt zumindest einer mathematischen begründung ;)

Antwort 4 von TByte vom 12.08.2020, 13:45 Options

Hallo
erstamla danke.
@Jaja:
Also die erste Frage, wie man die Dinger einliest, wurde mir beantwortet: Bibliotheken
Die zweite Frage, wie man die entwickelt, ist noch offen:
Jede Datei, die ich einlese, ist Textbasiert. Ich will aber nicht als Text einspeichern, sondern binär. Also beispielsweise ein Format entwickeln *.tbyte. Wenn man ein solche Datei mit einem Texteditor einliest, soll nicht ein Text kommen, sondern irgendein Kauderwelsch, fast sowas was rauskommt, wenn man versucht ein *.doc mit Editor zu öffnen.
@tomsan:
die frage, was die frage ist, konnte ich hoffentlich im Jaja-Abschnitt erklären.
--
Aus euren Antworten ergeben sich noch weiter Fragen:
Was ist ein ID3-Tag?
Was ist ein data aligment?
Was ist mit Codec gemeint?
mfg
TByte

PS.: C/C++

Antwort 5 von TByte vom 12.08.2020, 13:47 Options

auch ergänzung:
Hat denn nicht jede Datei eine Datenstruktur?
mfg
TByte

Antwort 6 von Jaja vom 12.08.2020, 16:00 Options

Zitat:
Jede Datei, die ich einlese, ist Textbasiert.


nein. mit meinem aufruf

fhd=open(dateiname,"rb");

habe ich eine binär datei lesend geöffnet - das b im aufruf ist der indikator.

Zitat:
Wenn man ein solche Datei mit einem Texteditor einliest, soll nicht ein Text kommen, sondern irgendein Kauderwelsch, fast sowas was rauskommt, wenn man versucht ein *.doc mit Editor zu öffnen.


naja - dann speicherst du eben in diese datei (dann natürlich schreibend öffnen) einfach deine strings oder einzelne zeichen/werte. zeichen/werte wäre dann mit einem texteditor so nicht wirklich zu lesen, wenn die werte ausserhalb der ascii tabelle für normale buchstaben liegen.
die strings sind natürlich weiterhin zu lesen, denn c strings sind im ansi c normalerweise im ascii format. wenn du die strings vorher in utf-16 oder utf-32 oder einen anderen, nicht trivialen code (utf ist hier triviel, da zeichen, die keine sonderzeichen sonderzeichen sind dem ascii code entsprechen) umwandelst, wird ein eifacher texteditor auch hier nichts mehr lesen können. dafür gibts natürlich bibliotheken.

Zitat:
Was ist ein ID3-Tag?


id3 tag

Zitat:
Was ist ein data aligment?


data alignment

Zitat:
Was ist mit Codec gemeint?


codec

Zitat:
Hat denn nicht jede Datei eine Datenstruktur?


da hast du natürlich recht - strengnenommen schon. ich wollte jedoch zwischen inhalt und form unterscheiden.
so ist bei mir also inhalt=datenstruktur und form=format.
das ist natürlich nicht richtig, aber es erschien mir im kontext passend.

so also zum format:


die anordnung und übergeordnete bedeutung von daten innerhalb einer datei.

so z.b. definierst du am anfang deines "formates" 5 felder (byte): das erste für das magicbyte des formates, das 2. für die versionsnummer, das 3 reserviert für spätere verwendung, das 4. die länge des payloads - des nutzbereiches - der eigentlichen daten.. nenn es wie du willst und das 5. feld für die art des payload.
danach folgen eben diese daten und danach noch als anhängsel eine prüfsumme mit was weiß ich vielleicht 4 byte.

so das wäre also ein format (es ist ein dummes format, da nachträgliche änderungen schwierig, feste felder, feste feldgrößen und cecksumme am ende ist auch an dummheit nicht zu übertreffen) . es sagt in so fern nicht über die nutzdaten aus, es dient nur der verwaltung. es ist auch nicht selbsterklärend, sondern man muss "wissen" was die einzelnen felder bedeuten. deshalb siehst du auch nur quatsch, wenn du wie du sagst eine .doc datei öffnest - der texteditor weiß NICHTS über das format.
eine dateiendung ist irrelevant, kann aber gerne nach tagesform vergeben werden.

zur datenstruktur:

die enthaltennen nutzdaten können nun mithilfe der im "format" angegebenen metainformationen (bei uns zb. feld 5 und checksumme) interpretiert werden. so z.b. könne es ein binärbaum sein, oder ein feld, eine liste oder nur ein hash.. es könnte aber auch ein mpeg4 codierter film sein, und feld 5 sagt es ist mit divx codiert - dann brauchst du also zum verarbeiten der nutzdaten einen divx decoder, oder encoder - kurz codec.


all das hab ich mir jetz ausgedacht um dir zu zeigen: du kannst dir auch allen möglichen quatsch ausdenken bzgl. eines formates (meinetwegen mit der endung .tbyte), aber eine datenstruktur wirst du eher nicht "erfinden", zumindest keine zweckmäßige.. da suchst du dir halt was aus, was es schon gibt. wenn es eben einfache c strings im ascii format sind, ist das doch nicht schlimm, nur weil ein texteditor das lesen könnte..

Antwort 7 von TByte vom 13.08.2020, 13:39 Options

Vielen vielen dank, also das hat meine Frage beantwortet:
Jede binär-Satei hat also mehrere Felder, in denen die einzelnen Daten gespeichert sind. Wieviele und in dem wievielten was ist, hängt vom Format ab. Hab ich das richtig verstanden?
---
Jetzt weiß ich zwar was ein Codec ist und wofür man ihn braucht (auch hier danke) aber wie funktioniert er?
mfg
TByte

Antwort 8 von Jaja vom 13.08.2020, 18:17 Options

Zitat:
Jede binär-Satei hat also mehrere Felder, in denen die einzelnen Daten gespeichert sind.


so ein blödsinn..

das ist doch nur eine definitionsfrage.. in einer datei stehen daten - punkt. die "logische" struktur ist nur vom programm, oder einem standard vorgegeben..


Zitat:
Wieviele und in dem wievielten was ist, hängt vom Format ab.


verallgemeinere das ein wenig auf das grundsätzliche vorhandensein einer logischen struktur und du hast recht.

wenn z.b. eine textdatei einfach dadurch gekennzeichnet ist, das sie "nur" druckbare zeichen und whitespace enthält, wäre das auch ein "format" (in unserer definition).

Zitat:
was ein Codec ist und wofür man ihn braucht (auch hier danke) aber wie funktioniert er?


also ganz allgemein stellt ein codec nur eine mathematische funktion dar, die werte aus der einen menge in eine andere abbildet.
manchmal (nicht immer) auch bijektiv, also eineindeutig in beide richtungen..
sinn der ganzen sache ist es, bestimmte eigenschaften (der zielmenge) zu erhalten, die eine/mehrere gewünschte eigenschaften haben, welche aber die quellmenge nicht hatte..
es wäre also nur eine transformation. so eine eigenschaft könnte z.b. optimierter platzverbrauch sein - oder qualität oder verbesserte verarbeitbarkeit oder sonst was..

bsp:

ich habe eine ausgangsmenge von (ganzen, positiven) zahlen, die ich gerne multiplizieren möchte. aus dieser menge stammen die zahlen a und b.
sei also a * b eine sehr teuere operation, log() (dekadischer logarithmus) und addition aber nicht.

dann kann ich also alle zahlen der quellmenge - darunter a und b per logarithmusfunktion in eine zweite menge abbilden.

hier kann ich eine einfache addition ausführen, denn

log(a) + log(b) = log(a · b)

danach kann ich über die umkehrfunktion des logarithmus - die potenz - das ergebnis der operation a + b ermitteln, ohne je eine multiplikation ausgeführt zu haben...


im eigentlichen sprachgebrauch begrenzt sich "codec" als transformation (eben auch u.u. verlustbehaftet) nur auf audio und video daten.

wie diese funktionieren kannst du jeweils beim fraglichen codec bei wikipedia nachlesen.

im allgemeinen benutzen diese genau solche transformationsfunktionen wie ich eben mit meinem beispiel - aber nicht log() sondern eher laplace-trans., z-trans. und wavelet-trans. und andere, um signale vom zeitbereich (quellmenge) in den bildbereich (zielmenge) zu transformieren wo dann funktionen möglich sind, die sonst nicht möglich wären.

dazu kommen dann allerdings noch deutlich komplexere methoden, um das gewünschte ergebnis zu erzielen..


also beispiel:

Antwort 9 von Jaja vom 13.08.2020, 18:20 Options

Zitat:
das ergebnis der operation a + b ermitteln


sorry a * b

Antwort 10 von TByte vom 14.08.2020, 18:08 Options

Zitat:

das ist doch nur eine definitionsfrage.. in einer datei stehen daten - punkt. die "logische" struktur ist nur vom programm, oder einem standard vorgegeben..

Aso, ok, ich glaub jetzt hab ichs begriffen (glau ich...)
Also in einer Datei, egal ob *.txt, *.doc oder *.tbyte, stehen entweder ASCII oder binär kodierte Daten. Was es ist, kann man selber entscheiden. Auch wenn es binär kodiert ist, kann man selber entscheiden wie was ist. So z.B. kann in einer *.tbyte Datei schlecht strukturierter Kauderwelsch stehen, den ein Programm namens TByTER ausliest. Richtig?
Es kann allerdings auch gut strukturiert sein, also z.B. die ersten 4 Byte stehen für die Art, wie das Programm die Datei behandeln soll, die nächsten 3 Byte wiederum für das Erstelldatum, die nächsten 4 für diverse Attribute, und die letzten für den eigentlichen Inhalt. Wie gesagt, es kann so sein, muss es aber nicht.
Habe ich das ganze richtig verstanden?
mfg
TByte

PS.: Vielen Dank für deine Mühen

Antwort 11 von Jaja vom 14.08.2020, 18:34 Options

ja so passt das schon.

allerdings ne kleinigkeit:

Zitat:
stehen entweder ASCII oder binär kodierte Daten.


am ende ist der ascii code doch auch nur eine mögliche interpretation - es sind nur zahlen, also in dem sinne auch ne "binärdatei". wenn du ne .doc datei im editor öffnest, werden alle dort stehenden zahlen als ascii interpretiert, was natürlich falsch ist..

c trennt zwischen binär und textdatei, damit bestimmte funktionen zur verfügung stehen, die jeweils nur auf ascii oder eben dem rest definiert sind.

Antwort 12 von TByte vom 15.08.2020, 21:28 Options

ja ne, is klar.
Tortzdem vielen Dank!!!
Dieses Thema hatte mich schon ne Weile beschäftigt.
Also danke und schönes Wochenende
mfg
TByte

Ähnliche Themen

suche programm mit dem man möbel selber erstellen kann
Cherry-red  04.02.2007 - 102 Hits - 1 Antwort

Bundsliga Manager 1997 Probleme unter XP
steha  11.02.2007 - 75 Hits - 4 Antworten

Programm zur Logfile Auswertung gesucht
luke  07.02.2007 - 104 Hits - 4 Antworten

Batchdatei, Fenster bleibt offen
ernesto2  21.11.2007 - 69 Hits - 1 Antwort

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Mon Jan 26 01:23:17 2026