TFileStream und unkorrekte Zahlen
-
hi, ich hole diesen thread mal nochmal heraus
also, ich bin immernoch kein stück weiter gekommen
egal was ich auch mache, es wird immer der wert '1' ausgelesen...egal, ob ich komplett aus der struktur auslese oder ob ich nur dh.ver auslese...hat keiner von euch eine idee? im hex-editor zeigt er folgende werte für die ersten bytes an:
33 49 02 00
in meiner struktur kommen dann für die ersten beiden bytes kommt der wert 18739 raus und für die bytes 3 und 4 kommt der wert 1 raus
wäre super, wenn einer noch eine idee hat! ansonsten könnte ich doch auch vielleicht die Hex-Werte direkt auslesen, oder? Wie ist denn das möglich?
-
Onkel Hotte schrieb:
//aufruf der datei setvertex um die daten auszulesen in eine struktur zu speichern SetVertex2(dh.kenn, dh.ver, dh.offset , dh.name, dh.dbuild, dh.tbuild, dh.loc, dh.soft, dh.pos);
Was ist denn SetVertex2() für eine Funktion? Habe dazu in der Hilfe nichts gefunden.
Gruß,
Alexander
-
[quote="Alexander Kempf"]
Onkel Hotte schrieb:
[cpp]
Was ist denn SetVertex2() für eine Funktion? Habe dazu in der Hilfe nichts gefunden.das ist eine von mir erstellte methode! diese speichert einfach nur die werte aus der struktur in variablen! ändert an den werten selber nichts...
-
Onkel Hotte schrieb:
das ist eine von mir erstellte methode!
Na, da wäre es doch nicht völlig verkehrt, diese Methode mal ein bißchen genauer
zu zeigen (Quelltext).Gruß,
Alexander
-
Alexander Kempf schrieb:
Na, da wäre es doch nicht völlig verkehrt, diese Methode mal ein bißchen genauer
zu zeigen (Quelltext).jo, wenn du meinst
jedoch ist der wert schon VOR dem aufruf der methode falsch...
hier die methode:
//--------------------------------------------------------------------------- /*SetVertex2 liest sämtliche Werte aus der Headerdatei aus*/ //--------------------------------------------------------------------------- void TFrMain::SetVertex2(short ke, short ve, short da, int na, int db, int tb, int lo, short so, int po) { I3.k = ke; I3.v = ve; I3.N = na; I3.d = da; I3.db = db; I3.tb = tb; I3.l = lo; I3.s = so; I3.p = po; }
-
Noch ein Zusatz:
ist es möglich die hex-werte aus einer datei direkt auszulesen (am besten mit TFileStream)? ich möchte also die hex-werte erhalten...wenn ja, wie geht das?
dann kann ich sie im notfall halt mit StrToInt 'per Hand' konvertieren...
-
Onkel Hotte,
das hier ...TDIHdr dr; dr.kenn = 1; dr.ver = 2; dr.offset = 3; dr.name = 4; dr.dbuild = 5; dr.tbuild = 6; dr.loc = 7; dr.soft = 8; dr.pos = 9; TFileStream *fd = new TFileStream("gaga.txt", fmCreate | fmOpenReadWrite); fd->Write(&dr, sizeof(TDIHdr)); TDIHdr dr2; fd->Position = 0; fd->Read(&dr2, sizeof(TDIHdr)); delete fd;
funktioniert problemlos.
-
tja, ich weiß, dass es bei den meisten klappt...
ich habe jetzt mal folgendes ausprobiert:
TFileStream *fd = new TFileStream(l, fmOpenRead); TDIHdr dh; g = fd->Read(&dh, sizeof(TDIHdr)); TFileStream *fd2 = new TFileStream("gaga.txt", fmCreate | fmOpenReadWrite); fd2->Write(&dh, sizeof(TDIHdr)); if (g != sizeof(TDIHdr)) return; fd2->Position = 0; fd2->Seek(0, soFromBeginning); SetVertex2(dh.kenn3di, dh.vers, dh.dataoffset , dh.name, dh.datebuild, dh.timebuild, dh.location, dh.soft, dh.points); fd2->Seek(64, soFromBeginning);
er speichert also den inhalt aus der alten datei in eine neue! mein hex-editor gibt jetzt folgende werte für die ersten vier bytes aus:
33 49 01 00
das kann doch nicht wahr sein
...er hat den wert wieder auf 1 geändert!!!
-
au mann...ich traue es mir gar nicht zu sagen, was falsch war
naja, mein quellcode ist völlig ok und gibt absolut die richtigen werte aus! ich hatte einen logischen fehler in meinem programm! au mann, meine software hat immer aus der falschen datei die daten ausgelesen...harr...solche dusseligen fehler kosten ganze 3(!!!) tage! so ein mist
-
Onkel Hotte schrieb:
mann, meine software hat immer aus der falschen datei die daten ausgelesen...harr...solche dusseligen fehler kosten ganze 3(!!!) tage! so ein mist
Tja, nur, wenn man bei der Fehlersuche etwas... ich nenn es mal unstrukturiert vorgeht und z.B. nicht alle äusseren Einflüsse prüft...
-junix