sizeof (long int) = 4 ???



  • Hallo,
    wenn ich eine Variable vom Typ long int in C deklariere und dann folgendes Ausgeben lasse:

    printf ("%d\n", sizeof (int)");
    printf ("%d\n", sizeof (long int)");
    

    erhalte ich bei beiden Ausgaben: 4

    Ich brauche eine long int variable, weil ich mit memcpy die Einsen und Nullen einer Double-Zahl in einen Integer speichern möchte, um dann mit Shiftoperationen die Zahl auseinandernehmen kann.

    Das Problem ist nur, dass

    double zahl = -12.2;
    long int tmp = 0;
    tmp = (long int*)memcpy (&tmp, &zahl, 4);
    

    den folgenden Fehler bringt:

    Run-Time Check Failure #2 - Stack around the variable 'tmp' was corrupted.

    Was geht da schief? Warum ist mein long int nicht 64 bit größ?



  • Du brauchst auf x86 ein long long int für 64 Bits oder nimmst du einfach (u)int64_t (stdint.h) oder

    double d = ...;
    char d_bits[sizeof d];
    memcpy(d_bits, &d, sizeof d);
    


  • Danke. Mit einem "long long" klappt es (long long int, gibts nicht)


Anmelden zum Antworten