nefertari001 Geschrieben 15. Februar 2007 Geschrieben 15. Februar 2007 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 Zitieren
Guybrush Threepwood Geschrieben 15. Februar 2007 Geschrieben 15. Februar 2007 hmm am besten bringst du mal ein Beispiel was genau in deiner Datei drin steht und was du am Ende haben möchtest. Zitieren
nefertari001 Geschrieben 16. Februar 2007 Autor Geschrieben 16. Februar 2007 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 Zitieren
Klotzkopp Geschrieben 16. Februar 2007 Geschrieben 16. Februar 2007 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. Zitieren
nefertari001 Geschrieben 16. Februar 2007 Autor Geschrieben 16. Februar 2007 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 Zitieren
Klotzkopp Geschrieben 16. Februar 2007 Geschrieben 16. Februar 2007 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. Zitieren
nefertari001 Geschrieben 16. Februar 2007 Autor Geschrieben 16. Februar 2007 also hier der Link: NIMA: Geospatial Standards and Specifications und dann MIL-PRF-89020B anschauen. also ich muss jetzt quasi rausfinden wie das mit diesem hexdump abläuft. Und die idee mit dem ofstream? Zitieren
Klotzkopp Geschrieben 16. Februar 2007 Geschrieben 16. Februar 2007 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. Erzeuge ein ofstream-Objekt.Spring zu der Stelle in der Datei, an der die gesuchten Daten stehen.Lies die Daten in passende Variablen ein.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. Zitieren
Klotzkopp Geschrieben 16. Februar 2007 Geschrieben 16. Februar 2007 Sorry, das muss natürlich überall ifstream heißen Zitieren
nefertari001 Geschrieben 16. Februar 2007 Autor Geschrieben 16. Februar 2007 #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ß Zitieren
Guybrush Threepwood Geschrieben 16. Februar 2007 Geschrieben 16. Februar 2007 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. Zitieren
Timon Geschrieben 23. Februar 2007 Geschrieben 23. Februar 2007 EDIT: Bzw. wenn du ein 16 Bit Programm schreibst einen int statt einem short. Nicht notwendig. Short int ist 16-bit.. egal fuer was er der das schreibt. Zitieren
Klotzkopp Geschrieben 23. Februar 2007 Geschrieben 23. Februar 2007 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). Zitieren
Empfohlene Beiträge
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.