Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hallo zusammen,

ich bin ein absoluter Neuling in C++.

Versuche momentag ein .min file im 2 Byte Integer Format als String einzulesen.

Anschließend muss ich 8 Bytes aus dem String scannen und die Integerwerte auslesen.

Ich habe keine Ahnung wie ich die datei einlesen soll und auch nicht wie ich anschließend darauf zugreife.

Bitte helft mir!!

Vielen Dank

Sonja

Geschrieben

hi

also das problem ist ich kann die Datei nur teilweise lesen. Der erste Teil ist die Bytereihenfolge der header und der identifikation. aber den eigentlichen Datenteil mit den Höhendaten kann ich nicht lesen. Allerdings weiß ich das die 4 bytes die ich brauche an Stelle 2040 stehen. Mir würde es schon helfen wenn jemand mir sagen kann wie ich diese datei in einen String packen und vielleicht ausgeben kann.

Gruß

Sonja

Geschrieben

Ist das nun eine Binärdatei oder eine Textdatei? Oder was genau meinst du mit "2 Byte Integer Format"?

Wenn es eine Binärdatei ist, brauchst du keine Strings. Erzeug ein ofstream-Objekt, spring mit seekg an die richtige Position, und lies mit read die Daten direkt in die Integervariablen.

Geschrieben

also in der Spezifikation steht eben: .min file are composed of a motorola Format two (2) byte integer strukture. Und setzt sich zusammen aus Hader Label, Identifikation record, Accuracy Record und Data Record und alles außer dem Data Record kann man im Editor lesen. Da es sich im date record um Höhendaten handelt kann es schon gut sein, dass das alles integer sind. Kannst du mir ein bischen genauer erklären wie du das gemeint hast : "ohne string"

Danke

Geschrieben
also in der Spezifikation steht eben: .min file are composed of a motorola Format two (2) byte integer strukture.
Ist das eine öffentlich Spezifikation? Hast du einen Link?

Kannst du mir ein bischen genauer erklären wie du das gemeint hast : "ohne string"
Wenn es sich um Binärdaten handelt (und davon gehe ich jetzt mal aus), kannst du sie nicht direkt in einen String stecken, weil Zeichen darin enthalten sein können, die keine druckbare Darstellung haben. Du müsstest also die Daten erst in eine druckbare Darstellung umwandeln, z.B. als Hexdump.

Aus einem Hexdump-String müsstest du die Daten dann aber erst mehr oder weniger mühsam extrahieren, wenn du mit ihnen etwas anderes tun willst, als sie eben als Hexdump darzustellen.

Deswegen ist es IMHO Quatsch, die Daten überhaupt in einen String zu packen.

Geschrieben
also ich muss jetzt quasi rausfinden wie das mit diesem hexdump abläuft.
Habe ich nicht eben lang und breit erklärt, warum das mit einem String im allgemeinen und einem Hexdump im besonderen Quatsch ist? :confused:

Und die idee mit dem ofstream?
Ich habe den Eindruck, du hast nur sehr wenig von dem verstanden, was ich geschrieben habe. :(

  1. Erzeuge ein ofstream-Objekt.
  2. Spring zu der Stelle in der Datei, an der die gesuchten Daten stehen.
  3. Lies die Daten in passende Variablen ein.
  4. Wenn du auf einer Little-Endian-Plattform bist, musst du noch die Bytereihenfolge vertauschen, weil die Datei, wie ich das gesehen habe, Big-Endian ist.

Geschrieben

#include <iostream>

#include <fstream>

using namespace std;

int main () {

int begin,end;

int zahl;

//datei

ifstream myfile ("n53.max");

begin = myfile.tellg();

//myfile.seekg (0, ios::end);

//position von der ich meinen Wert haben möchte

myfile.seekg (3442);

end = myfile.tellg();

myfile.close();

cout << "size is: " << (end-begin) << " bytes.\n";

cout << "high is: " << zahl << " meter.\n";

return 0;

}

so das hab ich jetzt fabriziert.

wie bekomme ich jetzt den Inhalt von "end"

mit get?

Gruß

Geschrieben

Also mir ist immer noch nicht klar was da jetzt genau in der Datei drin steht und die 45 Seiten PDf war mir ehrlich gesagt zu lang ;)

Aber wenn du sagst das da ein 2 Byte Integer steht dann solltest du den einfach mit read in ein short einlesen können.

EDIT:

Bzw. wenn du ein 16 Bit Programm schreibst einen int statt einem short.

Geschrieben
Short int ist 16-bit.. egal fuer was er der das schreibt.
Die Größe der Datentypen ist (bis auf char) in C und C++ nicht standardisiert.

Es gilt nur sizeof(char) <= sizeof(short int) <= sizeof(int) <= sizeof(long int).

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...