Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
C zu C# Übersetzung
Rico913
myCSharp.de - Member



Dabei seit:
Beiträge: 89

Themenstarter:

C zu C# Übersetzung

beantworten | zitieren | melden

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....
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Rico913 am .
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15977

beantworten | zitieren | melden

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 ;-)
- performance is a feature -

Microsoft MVP - @Website - @blog - @AzureStuttgart - github.com/BenjaminAbt
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4093

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
M.L.
myCSharp.de - Member



Dabei seit:
Beiträge: 259

beantworten | zitieren | melden

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 ;-)
private Nachricht | Beiträge des Benutzers