Codeschnipsel von C/C++ zu C#-> zu Hülf (was heist 0x04L)
-
Hallo Leute, mich gibts auch noch:-)
Ich habe ein dringendes Problem: Ich muss ein C# Programm schreiben, welches eine Funktion von einer vorhandenen C- Funktion nachbildet.
Da ich inzwischen total mit C# und ASP.NET verheiratet bin, fällt mir das sehr schwer.Es geht darum, Daten binär aus einer Datei auszulesen.
Bei anderen Dateien ist mir das gelungen, bei einer ist es etwas speziell.
Es müssten eine bestimmte Anzahl von Bytes ab einer bestimmten Position gelesen werden.
Grundsätzlich kein Problem, aber ich kommt mir der C-Angabe 0x00L nicht klar.
Hier mal der C-Schnipsel:h_ausw=open(d_auswname,O_BINARY|O_RDONLY ); pos=index_ausw*0x04L; POSITION BESTIMMEN lseek(h_ausw,pos, SEEK_SET);//Position setzen read (h_ausw,&buf_ausw,4);//lesen ... index_ausw++;//index erhöhen
Das Hauptproblem ist die Zeile
pos=index_ausw*0x04L;
Die variable index_ausw zählt einfach wie viele Datensätze schon gelesen wurden und erhöht sich bei jedem Durchlauf.
Die Position des Zeigers der Daten ist 0x04L, was immer auch das bedeuten mag.Mein C# Versuch dazu:
FileStream stream = new FileStream(persdat3,FileMode.Open); BinaryReader readerp1 = new BinaryReader(stream); while (stream.Position < stream.Length) { if (readerp1.PeekChar() != -1) { byte[] bIn = readerp1.ReadBytes(); string myIn = cf.ByteArrayToString(bIn); if (!String.IsNullOrEmpty(myIn)) lstPersDat1.Add(myIn); } }
Aber hierbei kommt nur Mist raus.
Was bedeutet das 0x04L?
Danke für jeden Tip!
-
0x04L ist eine Zahlenwert vom Typ "long" (L) in hexadezimaler Schreibweise.
Er multipliziert im Prinzip "index_ausw" immer mit 4Wenn in der Datei einfach nur immer 32-Bit-Zahlen hintereinander stehen:
using(BinaryReader b=new BinaryReader(File.Open(dateiname, FileMode.Open))) { try { int neZahl=b.ReadInt32(); // neZahl nun irgendwie verarbeiten } catch (EndOfStreamException ese) { // Datei zu Ende ;D } }
-
GRANDIOS!!!!
Also ganz easy so:
stream.Seek(zaehler * 0x04L, SeekOrigin.Begin); int neZahl = readerp1.ReadInt32(); lstPersDat3.Add(neZahl); zaehler++;
So gehts
VIIIIIIIIIIIIIELEN DAAAAAAANK!
EDIT: Es muss heißen: ReadUInt32();
Dann passt auch mit größeren Zahlen:-)