einzelne bytes eines doubles



  • hi,

    ich hoffe jemand kann mir helfen, mein Problem;

    ich muss an die 8 bytes einer double Var. ran kommen, bzw. wie kann man das umrechnen.

    z.B. 12,345 => 71 3d 0a d7 a3 b0 28 40

    ich hoffe es gibt eine einfache möglichkeit (mit nicht so viel rechnen)



  • Dazu musst Du wissen ob Du an einem little endian (z.B. PC) oder big-endian (z.B. Apple) sitzt. Ansonsten geht sowas:
    [cpp]
    #include <stdio.h>

    int main(void)
    {
    int i;
    double d = 12345.678;
    char* c;

    c = (char*) &d;

    for( i=0; i < sizeof(d); ++i)
    {
    printf("Stelle %d: %d\n", i, *(c+i));
    }

    return 0;
    }
    [/code]



  • wow, die Antwort kam schnell.

    Stimmt, einfach mit nem zeiger durch die Variable durchlaufen, dass ich da nicht selber drauf gekommen bin 😞

    hab' nur noch ne maske hinzugefügt damit nur die 2 niedrigsten bytes genommen werden, sonst können negative Werte vorkommen, die es aber nicht geben darf.

    Stelle 0: 58
    Stelle 1: 39
    Stelle 2: ffffffb4 => b4
    Stelle 3: ffffffc8 => c8
    Stelle 4: ffffffd6 => d6
    Stelle 5: 1c
    Stelle 6: ffffffc8 => c8
    Stelle 7: 40

    [cpp]
    #include <stdio.h>

    int main(void)
    {
    int i;
    double d = 12345.678;
    char* c;

    c = (char*) &d;

    for( i=0; i < sizeof(d); ++i)
    {
    printf("Stelle %d: %02x\n", i, ((*(c+i)) & 0x00FF));
    }

    return 0;
    }
    [/cpp]

    Trotzdem, nochmals vielen, vielen Dank!



  • phil2 schrieb:

    hab' nur noch ne maske hinzugefügt damit nur die 2 niedrigsten bytes genommen werden, sonst können negative Werte vorkommen, die es aber nicht geben darf.

    mach aus dem 'char *c' einen 'unsigned char *c'. bestimmt kannste dann auf das '& 0xff' verzichten...


Anmelden zum Antworten