Daten aus Datei lesen, dann interpretieren



  • Hallo Leute,

    also ich bin mir sicher, dass dies eines der häufigst gestellten Fragen ist 🙂 ...
    Aber ich habe keine passende Antwort auf mein Problem gefunden. So wende ich mir hier an die C-Experten und Bedanke mich für eure Hilfe.

    Folgendes Problem:
    Die Struktur:
    typedef struct{
    char test[7];
    unsigned short int nNumberValues;
    unsigned short int nNumberDelayValues;
    unsigned short int nRatio;
    unsigned short int nRatioCounter;
    unsigned short int nTraceModuleNumber;
    unsigned short int nTriggerCounter;
    double flBasicSamplingTime;
    unsigned short int nTimeStamp1;
    unsigned short int nTimeStamp2;
    unsigned short int nTimeStamp3;
    char bTrigger;
    char bTriggerRatio;
    char bCpyFlag;
    }structMist;

    Meine Definitionen:
    char testRead[sizeof(structTrace)];
    float *CompleteBuffer;
    structTrace *Header_Info;
    structMist *Mist;
    char Header_Info2[48];
    int BufferLength;
    structTime *Time;
    FILE *binFile, *ascFile;

    Hier der Problemteil:
    fread(testRead, sizeof(char),48, binFile );
    memcpy(Header_Info,testRead, sizeof(structTrace));
    memcpy(Mist,testRead, sizeof(structTrace));
    printf("Sodele hier kommt mal die Anzahl der Nummern: %d und %d\n", Mist->nNumberValues, (int)(testRead[8]+testRead[9]);

    Meine Frage:
    Also ich lese n-Character aus einer Datei. Übertrage ich diese Daten in eine Struktur dann steht die richtige Nummernanzahl da. Versuche ich nun die Character ab der struct[8] und [9] von Hand als int zu interpretieren versagt das ganze und ich bekomme die Nummer nicht.

    Wie erzeuge ich z.B. aus den Positionen testRead[8] und testRead[9] den richtigen Integer wert.
    Worin liegt der Unterschied zur Struktur?

    Danke und Grüßle aus dem sonnigen Bayern
    Christoph



    Müsste das

    char testRead[sizeof(structTrace)];
    

    nicht das heisen?

    char testRead[sizeof(structMist)];
    

    2. Brauchst "testRead nicht ,direkt mit struktur"

    struct structMist Temp;
    
    fread((char*)&tTemp, sizeof(structMist),1, binFile );
    

    ich nehme an du willst 48 datenblöcke der entsprechenden struktur laden?? dann so: (48 stück);

    struct structMist Temp[48];
    
    fread((char*)&tTemp, sizeof(structMist),48, binFile );
    

    so werden die binärdaten direkt in deine struktur(en) gemappt.

    Wie erzeuge ich z.B. aus den Positionen testRead[8] und testRead[9] den richtigen Integer wert.

    Wenn du es aber mit testRead machen willst, kommst du so an die daten (was aber umständlich ist):

    short int var =*((short int*) &testRead+8);
    

Anmelden zum Antworten