Proper Strukturlayout von Delphi gepackten Datensatz

Ich konvertiere eine Delphi-App nach C #. Es gibt eine Menge gepackter Datensätze, und einer ähnlichen Frage zufolge, die ich vor einigen Wochen gestellt habe, ist es besser, in Klassen zu konvertieren. Mir wurde jedoch gesagt, dass ich sie in Strukturen konvertieren muss, und ich könnte etwas Hilfe gebrauchen. Ich werde ein @ verwendBinaryReader, um aus einer Datei zu lesen und den Feldern innerhalb der Strukturen Werte zuzuweisen.

* Beachten Sie, dass die Datei, aus der ich lese, mit Delphi und gepackten Datensätzen erstellt wurde.

Hier ist eine Beispielstruktur:

Delphi:

Testrec = packed record
    now: TDateTime;
    MinLat: longint;
    MinLong: longint;
    Firsttime: TDateTime;
    MinAlt: single;
    MinFirst: single;
    MinDepth: single;
    MinSpeed: single;
    MinBot: single;
    res3: single;
    res4: single;
    res5: single;
    res6: single;
    MaxLat: longint;
    MaxLong: longint;
    Lasttime: TDateTime;
    MaxAlt: single;
    MaxFirst: single;
    MaxDepth: single;
    MaxSpeed: single;
    MaxBot: single;
    res9: single;
    res10: single;
    res11: single;
    res12: single;
    DataFlags: longint;
    ReviewFlags: longint;
    res13: longint;
    FirstPost: longint;
end;

Hier ist meine C # -Version:

public struct Testrec
{
    double now;
    int MinLat;
    int MinLong;
    double Firsttime;
    float MinAlt;
    float MinFirst;
    float MinDepth;
    float MinSpeed;
    float MinBot;
    float res3;
    float res4;
    float res5;
    float res6;
    int MaxLat;
    int MaxLong;
    double Lasttime;
    float MaxAlt;
    float MaxFirst;
    float MaxDepth;
    float MaxSpeed;
    float MaxBot;
    float res9;
    float res10;
    float res11;
    float res12;
    int DataFlags;
    int ReviewFlags;
    int res13;
    int FirstPost;
 }

Muss ich ein @ machStructLayout, Size, undCharSet?

Edit: Hier ist der relevante Delphi-Code zum Lesen der Binärdatei:

Testrec Header;
HeaderSize = 128;

RampStream:=TFileStream.Create(FilePath,fmOpenReadWrite OR fmShareExclusive );

RampStream.Read(Header,HeaderSize);
StartTime:=Header.Firsttime;
EndTime:=Header.Lasttime;

So richte ich meinen Binary Reader ein:

RampStream = new BinaryReader(new FileStream(RampName, FileMode.Open, FileAccess.ReadWrite, FileShare.None));

Antworten auf die Frage(2)

Ihre Antwort auf die Frage