DWORD



  • Ich hatte grad das Problem, dass ich POINT in DWORD umwandeln musste.
    In einem anderem Forum steht das:

    DWORD MakeDWord(int LoWord, int HiWord)
    {
    return ((HiWord * 0x10000) | (LoWord & 0xFFFF));
    }
    

    Könnte mir mal bitte jemand erklären was da steht? Es funktioniert, habs ja
    schon probiert, aber ich kapier es nicht.



  • OK:

    DWORD = 32 Bit!

    // ____________________
    //|          |         |
    //|  16 Bit  | 16 Bit  |
    //|__________|_________|
    //    High      Low
    

    Wir setzen LoWord = 1 und HiWord = 1, d.h:

    HEX: 0001 0001
    DEZ: 65537
    BIN: 0000 0000 0000 0001 | 0000 0000 0000 0001

    Das Ergebnis muss also 65537 sein.

    // & Verknüpfung -> AND
    // 00 | 0
    // 01 | 0
    // 10 | 0 
    // 11 | 1
    
    // | Verknüpfung -> OR
    // 00 | 0
    // 01 | 1
    // 10 | 1 
    // 11 | 1
    

    LoWord & 0xFFFF

    0000 0000 0000 0001
    1111 1111 1111 1111 (& verknüpft)
    -------------------
    0000 0000 0000 0001

    HiWord * 0x10000 = 0001 0000 0000 0000 0000

    (HiWord * 0x10000) | (LoWord & 0xFFFF)

    0001 0000 0000 0000 0000
    0000 0000 0000 0000 0001 ( | verknüpft)
    ------------------------
    0001 0000 0000 0000 0001

    d.h. HEX 10001 oder DEZ 65537 ⚠ passt

    Für gewöhnlich habe ich was besseres zu tun, aber diesmal hat's mich ebenfalls interessiert 😉

    MfG



  • * 0x10000
    

    ist gleich

    <<16
    

Anmelden zum Antworten