Delphianer bittet um Hilfe



  • Hallo
    übersetze mal wieder eine Funktion. Könntet ihr mir mal bitte wieder helfen.

    1.) extHeaderSize |= (unsigned char)extHeaderData[i]; was bedeutet |=
    2.) tagSize += HEADER_LENGTH; was bedeutet +=

    3.) int majorVersion := (int)header[TAG_INDICATOR_LENGTH]);
    int minorVersion := (int)header[TAG_INDICATOR_LENGTH + 1]);
    Header ist ein Buffer in der Klammer Konstanten, wieviel
    Bytes werden übergeben ein volles integer, so was geht in Pascal leider nicht.

    Danke



  • Das könntest du auch einfach mal schnell nachlesen, aber gut...

    1. x|=5 ist das gleiche wie x=x|5. | ist bitweises Oder. Mit |= setzt man Bits (löschen mit &=~).

    2. x+=5 ist das gleiche wie x=x+5. + muss ich ja nicht erklären, oder? 😉

    3. Formuliere deinen Satz doch noch mal verständlich.



  • Zu 3.
    Es wird ein Element aus dem Array header genommen.
    Dieses Element wird zu einem int umgewandelt und dann der Variablen links vom = zugewiesen.

    Wieviel Bytes das jetzt sind, hängt davon ab, wie header definiert ist.
    sizeof(header[0]) gibt die den Wert an.

    Und das ist in Pascal auch nicht anders.
    Du holst ein Element aus dem Array und schreibst den in eine Variable.
    Wenn die nicht vom gleichen Typ ist, musst du halt anpassen/umwandeln.



  • ats3788 schrieb:

    3.) int majorVersion := (int)header[TAG_INDICATOR_LENGTH]);
    int minorVersion := (int)header[TAG_INDICATOR_LENGTH + 1]);
    Header ist ein Buffer in der Klammer Konstanten, wieviel
    Bytes werden übergeben ein volles integer, so was geht in Pascal leider nicht.

    Das Original (http://stackoverflow.com/questions/7898537/extracting-guid-from-mp3-file-using-taglib) sieht mir doch sehr nach C++ (bzw. C mit Klassen aus).

    Den betreffenden Teil könnte man wie folgt in ein C-Programm umsetzen:

    #include <stdio.h>
    
    int main(void)
    {
        const int HEADER_LENGTH = 10;
        const int TAG_INDICATOR_LENGTH = 3;
        char header[HEADER_LENGTH] = {0,1,2,3,4,5,6,7,8,9};
    
        int majorVersion = (int)header[TAG_INDICATOR_LENGTH];
        int minorVersion = (int)header[TAG_INDICATOR_LENGTH + 1];
    
        printf ("majorVersion: %d\n", majorVersion);
        printf ("minorVersion: %d\n", minorVersion);
    
        return 0;
    }
    

    Der Cast (int) ist nicht notwendig. Auch in Pascal nicht:

    CONST
        HEADER_LENGTH = 10;
        TAG_INDICATOR_LENGTH = 3;
    
    VAR
        header : Array [0..HEADER_LENGTH-1] of BYTE = (0,1,2,3,4,5,6,7,8,9);
        majorVersion : Integer;
        minorVersion : Integer;
    
    BEGIN
        majorVersion := header[TAG_INDICATOR_LENGTH];
        minorVersion := header[TAG_INDICATOR_LENGTH+1];
        WriteLn ('majorVersion: ', majorVersion);
        WriteLn ('minorVersion: ', minorVersion);
    END.
    

    viele grüße
    ralph

    Edit: Integer zu LongInt (32 Bits) geändert.
    Edit2: Ach, Integer ist in Delphi ja auch so ein Wertbereiche-Chamäleon!



  • Danke für die Infos

    _matze ist ja toll nur | läßt sich nicht gooeln,
    wo ist die frage ungenau ?



  • rkhb genau das ist der Source den ich übersetzen möchte.

    Danke



  • ZenForAll schrieb:

    _matze ist ja toll nur | läßt sich nicht gooeln,

    Du kannst doch nach Operatoren googeln.

    ZenForAll schrieb:

    wo ist die frage ungenau ?

    "Header ist ein Buffer in der Klammer Konstanten, wieviel
    Bytes werden übergeben ein volles integer" ist nicht gerade ein verständlicher Satz. 😉


Anmelden zum Antworten