Laden...

C zu C# Übersetzung

Erstellt von Rico913 vor 2 Jahren Letzter Beitrag vor 2 Jahren 351 Views
R
Rico913 Themenstarter:in
95 Beiträge seit 2020
vor 2 Jahren
C zu C# Übersetzung

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....

16.807 Beiträge seit 2008
vor 2 Jahren

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.

Zeiger in C

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 😉

4.931 Beiträge seit 2008
vor 2 Jahren

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.

M
368 Beiträge seit 2006
vor 2 Jahren

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 😉