Datei öffnen und in dynamisches Array einlesen
-
Hallo Leute!
Ich brauche dringend eure Hilfe. Bin ganz neu hier und weiß auch nicht ob ich hier richtig bin. Also zu meinem Problem:Ich habe eine txt-Datei mit folgenden Daten: 23 41 fd 2b 45 ..... (sollen hex-daten sein) Jetzt möchte ich diese in ein Array einlesen als binär. Also dass praktisch in jedem Array-Feld [0010 0011] [0100 0001]... Geht das? Und wenn ja wie (MFC, C++) ? Bitte helft mir. Ich danke euch.
-
-
Danke dir für den Link, aber schon beim einlesen hab ich probleme. Er ließt mir die daten als string ein. Ich möchte aber dass er sie mir in ein Array byteweise einliest. Wie kann ich das umsetzen?
-
-
Also ich habe das jetzt mit fstream.h versucht aber der compiler kennt das nicht. liegt das vielleicht daran , dass ich keine Konsolenanwendung habe sondern eine mfc dialoganwendung?
-
Sorry, geht doch.
-
Also jetzt liest er mir zeichen einzeln ein. Kann ich nicht die Daten so einlesen dass er sie mir als byte Hexadezimal einliest?
-
lenchen schrieb:
Also jetzt liest er mir zeichen einzeln ein. Kann ich nicht die Daten so einlesen dass er sie mir als byte Hexadezimal einliest?
ifstream inputfile; [...Datei öffnen...] int beispiel; inputfile >> hex >> beispiel;
-
Danke dir seppJ .
Aber das habe ich auch schon probiert.
Vielleicht habe ich mein Problem nicht so gut beschrieben.
Ich habe also daten in einer txt dateigepeichert: 34 12 43 fb cf...
Ich würde diese gerne so einlesen, dass er mir diese als hex bytewiese versteht, also dass ich prktisch ein array habe und in jeder feldkomponente [34][12][43][fb]... steht. Ist das so möglcih? Und wenn ja wie? Ich suche schon ewig aber ich finde nichts.
Danke euch.
-
Alles ist möglich! Ich kapiere nur nicht, was du überhaupt willst. Wie man hexadezimale Zahlen einliest wurde dir gezeigt, aber das willst du anscheinend nicht. Wie man Zeichen einliest wurde wurde dir gezeigt, aber das willst du anscheinend nicht. Also: Was willst du?
-
also wie gesagt ich habe zeichen gespeichert z.b 234f3c
und ich möchte dass diese mir als hex interpretiert werden. Nicht dass mir zu der 2 der ascii code umgerechnet wird, sondern dass die 23 zusammen als hexzahl erkannt wird, also als 35(dez), also immer zwei zahlen zusammen eingelesen werden. Ich hoffe dass es mir gelungen ist das jetzt besser zu erklären.
-
Ahh, dein Problem ist also, dass keine Trennzeichen zwischen den Zahlen stehen. Das ging vorher nicht richtig hervor, da du immer so schöne getrennte Listen als Beispiel gegeben hast, die eigentlich optimal für istream::operator >> gewesen wären.
In diesem Fall (ungetestet, aber Prinzip sollte funktionieren):
stringstream str; // Stringstream, damit später die stream Operatoren verwendet werden können. char buffer[2]; // Puffer für zwei Zeichen inputfile.read(buffer,2); // Zwei zeichen lesen... str.write(buffer,2); // Und in den stringstream schreiben int hexwert; str >> hex >> hexwert; // Und als Abschluss die Zeichen als Hexzahl aus dem Stream lesenDas Ganze verpackst du in eine Schleife und machst noch ein paar Prüfungen dazu, wann deine Datei zu Ende ist und schreibst die extrahierten Hexwerte dann in dein Array.
-
doch ich hatte leerzeichen dazwischen, aber die hat er mir auch als zeichen interpretiert und ich habe die weggemacht, weil ich dachte dass es vorteilhafter wäre.
Danke werde es gleich mal ausprobieren
-
stringstream will der nicht erkennen
-
Ich flippe aus!!!!
Ich danke dir SeppJ. Genau das habe ich gesucht!!!
DANKE DANKE DANKE
Es geht!!!
-
Hallo alle zusammen!
zu meinem problem: ich habe eine schleife programmiert, in dieser ändert sich bei jedem durchlauf der wert einer variablen. also zum beispiel: a=23 -> a 46 -> a=55... Also sobald sich der wert von a ändert wird er ja im ganzen programm geändert. ich bräuchte aber den wert davor auch. gibt es etwas, das mir die zahl davor beibehält? (ich habe kein array, sodass ich zum bsp a[i-1] machen könnte)
-
1. Du solltest einen neuen Thread für dein Problem eröffnen, denn was dein Problem mit diesem Thread hier zu tun haben soll ist mir schleierhaft.
2. Solltest du mehr Informationen zu deinem Problem bereitstellen z. B. welchen Zweck erfüllt diese ominöse Variable in deinem Programm und wieso brauchst du den alten Wert (oder alle alten Werte?) von ihr?Ansonsten versuche ich mich mal, trotz der spärlichen Informationen, an zwei Lösungsvorschlägen:
Falls du nur den letzten Wert der Variable erneut benötigst, könntest du diesen einfach in einer weiteren Variablen speichern. Also irgendwie so:int a = 5; int alter_wert; while(irgendeine_Abbruchbedingung()) { mach_was(a); alter_wert = a; a = neuer_wert(); }Und solltest du alle alten Werten benötigen, dann speicher sie halt in einem std::vektor oder dergleichen (wenn du schon kein Array hast
):std::vector<int> werte; werte.push_back(5); while(irgendeine_Abbruchbedingung()) { mach_was(*werte.rbegin()); // über reverse_iterator auf aktuellen Wert zugreifen werte.push_back(neuer_wert()); }Alle Codebeispiele sind ungetestet
