Hey,
ich bräuchte mal eure erfahrene Hilfe. Ich habe ein altes Script, welches in C geschrieben wurde und muss es, da ich die Funktion benötige, in C# integrieren.
Leider fehlt mir aber das Fachwissen - gerade im Punkto Zeiger - das hab ich in C noch nicht richtig kapiert.
Hier mal das Code-Beispiel:
UINT getuint( FILE *f)
{
int i;
UINT ff;
char *c;
c = (char*)&ff;
for( i=3; i>=0; i-- )
c[i] = fgetc(f);
return ff;
}
Könnte mir das bitte jemand in C# übersetzen?
Was bedeutet der Abschnitt:
char *c;
c = (char*)&ff;
Warum gebe ich ff zurück, obwohl keine Operation stattfand? Woher kommt der Rückgabewert?
Vielen Dank schon mal im Vorraus....
Die Bedeutung der Operatoren kannst Du eigentlich super allein suchen....
C-Operatoren
Im Endeffekt gehts hier nur um die Funktionsweise von Pointern, die in C eben mit & für die Adresse bzw. mit * für den Wert an der Adresse dargestellt werden.
Hier wird also direkt an der Adresse von ff
manipuliert.
Entsprechend ändert sich auch der Wert der Rückgabe.
Inhaltlich wird hier eine Datei (aus einem Handle) gelesen und bzw. nur eine gewisse Anzahl von Zeichen als Ziffern in die Speicheradresse von ff
geschrieben.
Eine durchaus fehleranfällige Art und Weise, da der Code immer impliziert, dass Zahlenwerte in der Datei stehen.
Mit dem Wissen kannst das eigentlich selbst umschreiben.
Das Forum ist ja kein Code Convert Tool 😉
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Hallo,
der Code liest 4 Bytes ein und gibt sie als UINT
(unsigned int
) zurück.
in .NET kannst du einfach die Methode BinaryReader.ReadUInt32 (bzw. ReadInt32
) verwenden (wobei man bedenken muß, daß dies generell abhängig von der Endianess ist).
Zum Einlesen (und Parsen) von Dateiinhalten solltest du also generell den BinaryReader
(in Verbindung mit einem Stream
) benutzen. Analog den BinaryWriter
zum Abspeichern binärer Daten.
Weiterhin könnte man zu sog. "unsafe code" recherchieren (langfristig dürfte die Kontrolle durch das .NET Framework aber die solidere Entscheidung sein)
Goalkicker.com // DNC Magazine for .NET Developers // .NET Blogs zum Folgen
Software is like cathedrals: first we build them, then we pray 😉